我试图在C#中创建一个使用布尔数组作为其键的字典.
Dictionary<bool[], string>
Run Code Online (Sandbox Code Playgroud)
bool数组的固定长度为1000,并且长度都相同.我遇到了哈希码的问题,并且由于数组的长度,'exclusive或'的常用方法没有那么多意义.
StackOverflow上的类似问题通过GetHashCode方法中的"exclusive or"来解决.我认为这不适用于这种情况.我想用它作为:
Dictionary<bool[], string> myDict =
new Dictionary<bool[], string>(EqualityComparer);
Run Code Online (Sandbox Code Playgroud)
其中EquaityComparer做的事情如下:
public class EqualityComparer : IEqualityComparer<bool[]>
{
public bool Equals(bool[] x, bool[] y)
{
return x.SequenceEqual(y);
}
public int GetHashCode(bool[] x)
{
// this part doesn't work correctly
int hc = x.GetHashCode();
return hc;
}
}
Run Code Online (Sandbox Code Playgroud)
当然,关于bool数组的所有常见问题都是可变的,任何派生密钥的大小与性能相关都适用于此......虽然我没有解决方案.
你Equals
和他HashCode
都不正确.
大概你希望用来SequenceEqual
比较数组是否相等,或者是一个简单的for循环.
要计算哈希码,您可以使用任何标准方法.非常重要的是,如果两个项目相等,那么它们必须具有相同的散列.
例
public int GetHashCode(bool[] x)
{
int result = 29;
foreach (bool b in x)
{
if (b) { result++; }
result *= 23;
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
有关
归档时间: |
|
查看次数: |
1486 次 |
最近记录: |