.net - 使用带有字符串键和不区分大小写的搜索的哈希表/字典

标签 .net .net-3.5 dictionary hashtable case-insensitive

想知道这是否可能。

我们有一个第 3 方库,其中包含有关用户的识别信息...

与库的主要交互是通过一个以字符串为键的 HashTable,并返回该键的信息对象图。

问题是, key 显然是区分大小写的,但我们从用户浏览器获得的不一定与大小写匹配......(我们经常得到完全小写的 key )

我想知道是否可以对哈希表进行不区分大小写的键搜索。

例如

Hashtable ht = new Hashtable();
ht.Add("MyKey", "Details");

string result = ht["MyKey"];
string result = ht["MYKEY"];
string result = ht["mykey"];

如果我们可以向公司提交支持票以添加此功能,是否有任何其他支持此功能的 DataStructures(即新的通用集合/字典)

最后,是否可以覆盖 System.String GetHashCode() 方法,以
使所有大小写不变的字符串返回相同的哈希码...例如我认为这是一个不受欢迎的 string是密封类

如果有人有任何建议,请欢呼

最佳答案

使哈希表比较不区分大小写的代码

对于 2.0、3.0、3.5

Hashtable ht = new Hashtable(StringComparer.InvariantCultureIgnoreCase);

您可以在 this 上获取有关 InvariantCultureIgnoreCase 与 OrdinalIgnoreCase 的信息。所以链接

或者
Hashtable ht = System.Collections.Specialized.CollectionsUtil.CreateCaseInsensitiveHashtable();

由于不区分大小写的字典集合非常常见,因此 .NET Framework 有一个 CollectionUtil 类,该类支持创建不区分大小写的 Hashtable 和 SortedList 对象。通过调用 CreateCaseInsensitiveHashtable 或 CreateCaseInsensitiveSortedList 使用。

对于 .Net 1.0(我不确定 1.0 是否支持 StringComparer)
public class InsensitiveComparer : IEqualityComparer
{
    CaseInsensitiveComparer _comparer = new CaseInsensitiveComparer();
    public int GetHashCode(object obj)
    {
        return obj.ToString().ToLowerInvariant().GetHashCode();
    }

    public new bool Equals(object x, object y)
    {
        if (_comparer.Compare(x, y) == 0)
        {
            return true;
        }

        else
       {
           return false;
       }
    }
}

Hashtable dehash = new Hashtable(new InsensitiveComparer());

关于.net - 使用带有字符串键和不区分大小写的搜索的哈希表/字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/856989/

相关文章:

.net - IL 文件中的 .extern 模块

java - 如何从 Java 中确定安装了哪个 .NET 框架

c# - 文本 block 在数据网格 WPF 中选择前景色

c++ - 如何更新 map<string, vector<int>> 类型的 map ?

python - 计算字典键的总和

c# - 将文字编码不正确的字符串(例如 "ñ")转换为 ISO-8859-1 (Latin1) H

c# - 在客户端应用程序中隐藏服务命名空间

c# - Amazon S3 .net SDK - 在一个请求中删除多个对象

c# - 如何在对 C# .NET 3.5 服务器进行 DCOM 调用时可靠地检查客户端身份?

dictionary - ConcurrentHashMap如何获取tailMap?