与列表进行快速字符串比较

Mat*_*lls 5 c# string list

我需要一个快速方法来确定给定的字符串是否在字符串列表中.

字符串列表直到运行时才知道,但此后它不会改变.

我可以简单地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#实现吗?

有些人提到绕过StringGetHashCode,并使用更快的进行哈希函数.那里有基准吗?

使用LINQ表达式实质上创建一个优化的switch语句是一种看起来非常有趣的新方法.

还有什么工作?设置成本并不重要,只是搜索速度.

如果重要,传入的字符串值很少会出现在列表中.