我需要一种快速的方法来确定给定的字符串是否在一个字符串列表中。
字符串列表在运行时未知,但此后它将不会改变。
我可以简单地创建一个名为strings
的List<String>
,然后执行以下操作:
if (strings.Contains(item))
然而,如果列表中有许多字符串,这种方法的表现会很差。
我也可以使用一个 HashSet<String>,但这将需要在每个传入的字符串上调用 GetHashCode,以及 Equals,如果列表中只有三个字符串,这将是一种浪费。我提到了这需要快速吗?
我可以在设置时决定使用 List 还是 HashSet,具体取决于字符串的数量(例如,对于少于10个的字符串使用 List,否则使用 HashSet),就像 HybridDictionary 中的逻辑一样。
由于字符串是 Unicode,标准 Trie 结构将不起作用,尽管 Radix 树 / Patricia trie 可能有效。是否有任何带基准测试的好的 C# 实现?
有人提到绕过 String 的 GetHashCode 并使用更快的哈希函数。是否有任何基准测试?
使用 LINQ 表达式来创建一个优化的 switch 语句的方法是一种新颖的方法,看起来非常有趣。
还有什么方法可以使用?安装成本并不重要,只要搜索速度快即可。
如果有关系的话,传入的字符串值很少出现在列表中。