gpt4 book ai didi

c# - 作为字典键的整数数组

转载 作者:可可西里 更新时间:2023-11-01 08:02:57 25 4
gpt4 key购买 nike

我希望有一个使用整数数组作为键的字典,如果整数数组具有相同的值(甚至不同的对象实例),它们将被视为相同的键。我应该怎么做?

以下代码不起作用,因为 b 是不同的对象实例。

 int[] a = new int[] { 1, 2, 3 };
int[] b = new int[] { 1, 2, 3 };
Dictionary<int[], string> dic = new Dictionary<int[], string>();
dic.Add(a, "haha");
string output = dic[b];

最佳答案

您可以创建一个 IEqualityComparer 来定义字典应该如何比较项目。如果项目的顺序是相关的,那么这样的事情应该有效:

public class MyEqualityComparer : IEqualityComparer<int[]>
{
public bool Equals(int[] x, int[] y)
{
if (x.Length != y.Length)
{
return false;
}
for (int i = 0; i < x.Length; i++)
{
if (x[i] != y[i])
{
return false;
}
}
return true;
}

public int GetHashCode(int[] obj)
{
int result = 17;
for (int i = 0; i < obj.Length; i++)
{
unchecked
{
result = result * 23 + obj[i];
}
}
return result;
}
}

然后在创建字典时将其传入:

Dictionary<int[], string> dic
= new Dictionary<int[], string>(new MyEqualityComparer());

注:这里计算得到的hash code: What is the best algorithm for an overridden System.Object.GetHashCode?

关于c# - 作为字典键的整数数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14663168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com