我在四处寻找一种方法,让字典键/哈希集string变得不区分大小写。我在SO上甚至在MS网站上都找到了很多答案。
据我所见,答案似乎是说,通过将IEqualityComparer<TKey>设置为Dictionary和HashSet的StringComparer.CurrentCultureIgnoreCase (或类似的东西),这将使它看起来好像键集将不区分大小写。但是不,他们说它设置了相等操作符,这是不同的。
我熟悉的散列集将键对象转换为散列数值,然后用于访问可能包含您要查找的键的桶。然后,使用相等操作符来检查该桶是否实际包含您要查找的值。
如果是这样的话,那么可以想象,a和A可能在不同的桶中,从而允许在没有冲突的情况下添加这两项,或者检查而找不到另一项。我必须假设情况并非如此,因为这会破坏大量的代码,那么这里到底发生了什么呢?窗帘后面发生了什么事?
发布于 2022-06-02 19:58:48
在.NET中,两个“相等”的对象(并用作散列键)必须生成相同的哈希代码。因此,如果您使用不区分大小写的比较器创建字典,那么a和A肯定会映射到相同的“桶”。这种情况发生在StringComparer.CurrentCultureIgnoreCase返回的对象中,该对象生成哈希代码,其方式是保留相等关系。
请注意,两个不等于的对象可能生成相同的哈希代码,但是Dictionary类首先检查哈希代码以查看两个键是否相等,如果可以,则检查它们是否相等。
https://stackoverflow.com/questions/72481572
复制相似问题