【发布时间】:2011-02-10 23:23:25
【问题描述】:
免责声明:也许是微 YAGNI 优化,但请听我说 ..
问题在于实现不区分大小写查找表。
- 我的老方法:在填充字典时,在插入之前将键大写。当有人为您提供查找键时,将键大写。
- 新方法(我今天了解了):字典接受了一个 IComparer 实现,所以我可以传入
StringComparer.InvariantCultureIgnoreCase。我认为它会委托给 String.Compare(x, y, SomeIgnoreCaseEnum)
新方法的优势在于我不需要确保在对字典进行查找的 n 个位置中的每一个位置都执行 .ToUpper() 。
我的问题是哪一个更有效?我猜只是好奇......
更新:注意我不需要知道插入的原始密钥。此外,使用的密钥与文化无关。
【问题讨论】:
-
编写自己的微基准测试(运行每种类型 100,000 次,计时 3 次以考虑可变条件)。
-
记住一点。如果您在某些时候需要原始形式的密钥(例如用于打印),第一个选项不是最佳选择。
-
@Brian - 是的,我忘了把它放进去。我的用例不区分大小写且与文化无关。
-
与文化无关,我会使用
StringComparer.OrdinalIgnoreCase。 -
还可以查看这篇文章,它表明在创建 Dictionary 对象时使用比较器可以提高性能。 dotnetperls.com/dictionary-stringcomparer
标签: .net dictionary case-insensitive