c# 字典:通过声明实现键的大小写不敏感

42 浏览
0 Comments

c# 字典:通过声明实现键的大小写不敏感

我有一个`Dictionary`的字典。它以前是`Dictionary`,但是其他\"标识符\"已经出现了,现在键被处理为字符串。\n问题是我的源数据中的`Guid`键以`VarChar`的形式出现,所以现在`\"923D81A0-7B71-438d-8160-A524EA7EFA5E\"`作为键和`\"923d81a0-7b71-438d-8160-a524ea7efa5e\"`不相同(在使用Guid时不是问题)。\n.NET框架真正好(而且很棒)的地方是,我可以这样做:\n

Dictionary _recordSet = new Dictionary(
    StringComparer.InvariantCultureIgnoreCase);

\n这样非常好用。但是嵌套字典怎么办?像下面这样:\n

Dictionary> _customRecordSet 
    = new  Dictionary>();

\n在这种嵌套字典中,我该如何指定字符串比较器?

0
0 Comments

在C#中,Dictionary是一种常用的数据结构,它允许存储键值对,并通过键来访问值。然而,默认情况下,Dictionary的键是区分大小写的,这意味着如果使用不同大小写的键来访问值,将会得到不同的结果。

因此,有时候我们希望在Dictionary中使键对大小写不敏感。这个问题的出现是因为当我们使用Dictionary存储数据时,需要以不区分大小写的方式来比较键。

解决这个问题的方法是在创建Dictionary实例时,使用StringComparer.InvariantCultureIgnoreCase作为参数来指定键的比较方式。这样,无论键的大小写如何,都将被视为相等。

以下是解决方法的示例代码:

public void insert(int int_key, string guid, CustomClass obj)
{
    if (_customRecordSet.ContainsKey(int_key)
         _customRecordSet[int_key][guid] = obj;
    else
    {
         _customRecordSet[int_key] = new Dictionary 
                                     (StringComparer.InvariantCultureIgnoreCase);
         _customRecordSet[int_key][guid] = obj;
    }
}

通过使用StringComparer.InvariantCultureIgnoreCase,我们可以在声明Dictionary时使键对大小写不敏感,从而解决了问题。这样,无论键的大小写如何,都能正确地访问和存储对应的值。

0
0 Comments

问题的出现原因是在向外部字典中添加元素时,很可能会创建一个嵌套字典的新实例,并在此时使用了一个带有IEqualityComparer<TKey>参数的重载构造函数进行添加。

解决方法是使用StringComparer.InvariantCultureIgnoreCase作为IEqualityComparer<TKey>参数,以实现不区分大小写的键。

根据作者的更新,StringComparer.OrdinalIgnoreCase在只需要忽略字符大小写时更高效。然而,这一观点没有经过作者自己的验证,所以具体效果可能因人而异。

0