如果我在已排序的简单字符串标签列表上执行Contains()(而不是复杂的句子),它会比随机排序的标签更快地运行吗?如果没有,那么什么是更好的数据结构。我不一定要先在字典中哈希(出于性能原因),但我愿意接受建议
答案 0 :(得分:7)
如果你只是排序List<string>
,那就没有了。您可以使用List<T>.BinarySearch
,但Contains
不会为您执行此操作,因为它并不真正“知道”您的列表已排序。散列它们正好 性能虽然 - HashSet<T>
可能是您最好的选择 - 假设您没有遇到哈希冲突,它将具有O(1)Contains
性能
您可以在.NET 4中使用SortedSet<T>
这基本上是一个排序列表 - 您将获得O(log n)性能,但这不需要哈希计算,可以如果你的字符串非常长,你可以加快速度。 (当然,您需要进行基准测试以确定。)这大致相当于“排序然后使用二进制搜索”方法,但不依赖于您手动操作。
SortedList<,>
和SortedDictionary<,>
也可用,但理想情况下,如果您不需要键/值映射,则应使用集合关心订单。