我需要一个快速方法来确定给定的字符串是否在字符串列表中.
字符串列表直到运行时才知道,但此后它不会改变.
我可以简单地List<String>
打电话strings
然后做:
if (strings.Contains(item))
Run Code Online (Sandbox Code Playgroud)
但是,如果列表中有许多字符串,这将表现不佳.
我也可以使用a HashSet<String>
,但是这将需要调用GetHashCode
每个传入的字符串以及Equals
,如果列表中只有例如3个字符串,这将是一种浪费.我提到这个需要快吗?
我可以在设置时,决定使用一个List
或一个HashSet
取决于字符串的数量(例如,使用List少于10个字符串,否则使用HashSet),而不是像中的逻辑HybridDictionary
.
由于字符串是unicode,标准的Trie结构将不起作用,尽管Radix树/ Patricia trie可能.那里有基准测试的C#实现吗?
有些人提到绕过String
的GetHashCode
,并使用更快的进行哈希函数.那里有基准吗?
使用LINQ表达式实质上创建一个优化的switch语句是一种看起来非常有趣的新方法.
还有什么工作?设置成本并不重要,只是搜索速度.
如果重要,传入的字符串值很少会出现在列表中.
您可以使用trie来保存字符串列表; 尝试设计用于快速重线索 VAL.这是在C#中实现trie 的一个例子.
更新:针对Unicode(而不是C#)的折叠trie实现的Unicode和Ifo的折叠尝试的Powerpoint演示