我想存储一个 IEnumerable
某个对象的 Id
.
有很多情况下,我将需要从那个。IEnumerable
某个元素 Id
. 在这种情况下,如果使用一个 Dictionary
其中 Key
是 Id
比起使用 FirtOrDefault
带着 List
?
这是否意味着,如果我需要获得一个特定的元素与一些 Id
我是否应该一直使用 Dictionary
? 什么是权衡,其中自 Dictionary
还实现了 IEnumerable
喜欢 List
? 有没有比这个性能更好的东西?
我想比较的情况是
FooDictionary.TryGetValue(Id, out var element)
vs BarList.FirstOrDefault(x => x.Id == Id)
我没有使用 Id
作为索引,实际上,我的 Id
是一个 Guid.NewGuid()
.
这取决于你的用例。 如果你将按顺序插入元素(即你的id将对应于索引),那么我会建议使用列表,因为尽管两个访问都应该在恒定的时间内运行,但列表索引几乎总是比哈希表查找更快。 然而,如果你将插入杂项ID(例如,你的ID将对应于索引),那么我建议使用List。1001
, 17786
, 234
),那么字典将是理想的数据结构,因为恒定时间的查找永远比线性搜索快(以线性时间运行--即what .First
就可以了)。)
注意:如果你使用id作为索引,那么你可以简单地检查id是否在列表中,(id < list.Count()
),然后再访问它。 使用LINQ也会更快,因为你不需要先访问键(就像使用Dictionary那样)。