这是伪代码
sbyte[] array1 = new sbyte[100];
array1.setValues();
sbyte[] array2 = (sbyte[])array1.Clone();
但array1.getHashCode()
与array2.getHashCode()
不相同;
如何为array1和array2获取相同的哈希码?
P.S:字典没用。因为我想将这些数组添加到哈希表中。每次添加后,我需要检查之前添加的可能相同的内容数组。
P.S2:我似乎应该澄清我的问题。起初我在Using Hash in C#发布了完整的问题,当问题解决时,问题就出现了。
答案 0 :(得分:12)
这不是同一个数组 - 它是一个具有相同内容的不同数组。
数组GetHashCode()不会散列内容。该哈希很简单,就是引用的哈希。
如果字典等需要,您可以编写自定义IEqualityComparer<sbyte[]>
。
答案 1 :(得分:1)
无法从数组类重写GetHashCode方法。但是你可以将数组包装在另一个类中,并使用它的一些项来指定它的哈希键。
public class WrappedArray
{
sbyte[] _inner = new sbyte[10]
//...
override public int GetHashCode()
{
return _inner[0] ^ _inner[1] ^ _inner[2];
}
}
这只是一个想法。哈希码对于每个对象不需要是唯一的,因为哈希结构旨在处理冲突。