C# - 搜索字典的键与列表中的搜索值

时间:2014-01-27 22:55:05

标签: c# dictionary generic-list

就搜索速度而言,搜索字典的键或列表的值是否更好?

换句话说,哪一个是最优选的?

Dictionary<tring,string> dic = new Dictionary<string,string>();
if(dic.ContainsKey("needle")){ ... }

或者

List<string> list = new List<string>();
if(list.Contains("needle")){ ... }

3 个答案:

答案 0 :(得分:8)

如果“更好”意味着“更快”,那么使用字典。字典键按哈希码进行组织,因此查找列表搜索的速度明显快于列表搜索中的多个项目。

使用良好的散列算法,字典搜索可以接近O(1),这意味着搜索时间与字典的大小无关。另一方面,列表是O(n),意味着时间(平均)与列表的大小成比例。

如果您拥有关键项(不将值映射到值),您也可以尝试HashSet。它具有O(1)查找的好处,而没有字典的Value侧的开销。

(当然,开销可能很小,但如果你不需要它,为什么要这样做?)

答案 1 :(得分:4)

对于查找,字典通常是最好的,因为它所花费的时间保持不变。使用列表会增加列表获得的值。

另请参阅:http://www.dotnetperls.com/dictionary-time

答案 2 :(得分:2)

我建议在查找次数大大超过插入次数时使用Dictionary。当你总是少于四个项目时,可以使用List

  

对于查找,Dictionary通常是更好的选择。所需时间是平坦的,O(1)恒定的时间复杂度。列表具有O(N)线性时间复杂度。三个元素可以比在字典中查找的更快地循环。