0

在 .net 中,存储参考大小写的最佳数据结构是什么?

我正在寻找一种数据结构,它可以返回最初插入条目的外壳。像这样的东西:

Store.Add("HeLLo") //Adds a key

if (Store.Contains("hEllO")) //returns true (case-insensitive lookup)
    Store.Retreive("hEllO")) //return HeLLo, as initially inserted.

我目前使用不区分大小写的字典,其键等于值,但这感觉很难看。

Dictionary<string, string> dic = 
    new Dictionary<string, string>(StringComparer.InvariantCultureIgnoreCase)

dic.Add("HeLLo", "HeLLo")
if (dic.ContainsKey("hEllO"))
    dic["hEllO"]
4

1 回答 1

0

我真的找不到任何方法来从任何集合中获取键,就像在 C++ 中那样(其中 std::maps 返回键/值对上的迭代器)。

如果你准备好做一些棘手的工作,它是可能的:实现你自己的 StringComparer 派生类(当然让所有东西都由 StringComparer.InvariantCultureIgnoreCase 实现),m_key在检索之前用搜索到的键初始化一个成员,例如,并让Equals(a,b)方法日志m_actualKey当基本实现返回 true 时,将比较值放入成员中,保持aif 它不是m_keyelse 保持b

检索成功后,总会有一个“ Equals(a,b)return 1”事件,保证你在m_actualKey. 请注意,如果从多个线程中使用字典,则必须同步查询。

于 2012-11-03T17:55:41.633 回答