我正在将大量数据数组存储到一个列表中,但是,如果数据已经存在于我的列表中,我不想存储它——数据的顺序无关紧要。我认为使用 GetHashCode 生成哈希码是合适的,因为它应该不关心顺序。但是,我通过下面的简单测试发现,对于前两个 string[] a1 和 a2,它会生成不同的哈希码。
我不能使用这种检查方法吗?有人可以建议更好的检查方法吗?
string[] a1 = { "cat", "bird", "dog" };
string[] a2 = { "cat", "dog", "bird" };
string[] a3 = { "cat", "fish", "dog" };
Console.WriteLine(a1.GetHashCode());
Console.WriteLine(a2.GetHashCode());
Console.WriteLine(a3.GetHashCode());
上述测试的结果产生了三种不同的哈希码结果。
理想情况下,我希望看到 a1 和 a2 具有相同的哈希码...所以我正在寻找可以让我快速检查这些字符串是否已经存在的东西。
最佳答案
根据数组用于确定相等性的标准,您的数组不相等。数组用于确定相等性的标准是两个单独创建的数组从不相等。
如果您希望单独创建的具有相同元素的集合进行比较,那么请使用支持它的集合类型。
我推荐HashSet<T>
,在你的情况下 HashSet<string>
.它不提供 GetHashCode()
和 Equals()
你直接想要的行为,但它有一个 CreateSetComparer()
方法为您提供一个帮助器类,该类确实为您提供散列码和比较器方法来执行您想要的操作。
请记住,您不能使用它来进行快速相等性检查。您只能将其用于快速不平等检查。两个不相等的对象可能仍然具有相同的哈希码,基本上是随机的。只有当哈希码不相等时,您才能跳过相等性检查。
关于c# - 用于检查字符串数组中唯一性的哈希码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33661540/