代码之家  ›  专栏  ›  技术社区  ›  Gishu

Dictionary<string,T>(StringComparer)vs Dictionary<string,T>和存储密钥.ToUpper:您更喜欢哪一种?

  •  4
  • Gishu  · 技术社区  · 14 年前

    免责声明:也许是微雅格尼优化,但听我说。。

    问题是如何实现 不区分大小写 查找表。

    • 我的老方法是:在填充字典时,在插入前用大写字母键。大写当有人给你一个查找键时的键。
    • 新方法(我今天了解到):Dictionary采用了IComparer实现,所以我可以传入 StringComparer.InvariantCultureIgnoreCase . 我想它会委托给字符串。比较(x,y,SomeIgnoreCaseEnum)

    这种新方法的优点在于,我不需要确保在n个位置中的每一个位置都执行.ToUpper(),在这n个位置中对字典进行了查找。

    更新:注意我不需要知道插入的原始密钥。使用的键也是文化不可知的。

    4 回复  |  直到 14 年前
        1
  •  3
  •   Jon Skeet    14 年前

    它是

    最后,指定字符串比较:

    • 也就是说你不用那么小心地使用字典
    • 意味着原来的套管被保留在钥匙上,这在某些情况下有助于诊断
        2
  •  1
  •   Community CDub    7 年前

    看看这个 entry . 今天仍然有效。

    摘录:来自MSDN的 New Recommendations for Using Strings in Microsoft .NET 2.0 "

        3
  •  1
  •   Mike Two    14 年前

    我不知道性能如何,但我更喜欢StringComparer选项。用ToUpper你会丢失信息(原来的外壳)。诚然,你可能不需要它,但总有一天你可能需要它,它不会觉得有更多的工作来保持它(因此从雅格尼原则安全)。

    总有一天我会忘记给图珀打电话,陷入一个充满伤害的世界。但是我的单元测试当然可以救我。

        4
  •  0
  •   Gishu    14 年前

    从我的测试中( source code here

    对于1M ContainsKey查找,

    • :971毫秒