C#中相同数组的不同哈希码

时间:2011-01-08 14:53:40

标签: c# arrays hashcode

这是伪代码

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#发布了完整的问题,当问题解决时,问题就出现了。

2 个答案:

答案 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];
  }
}

这只是一个想法。哈希码对于每个对象不需要是唯一的,因为哈希结构旨在处理冲突。