我应该使用元素的Id作为键的Dictionary而不是List?[已关闭]

问题描述 投票:0回答:1

我想存储一个 IEnumerable 某个对象的 Id.

有很多情况下,我将需要从那个。IEnumerable 某个元素 Id. 在这种情况下,如果使用一个 Dictionary 其中 KeyId 比起使用 FirtOrDefault 带着 List?

这是否意味着,如果我需要获得一个特定的元素与一些 Id我是否应该一直使用 Dictionary? 什么是权衡,其中自 Dictionary 还实现了 IEnumerable 喜欢 List? 有没有比这个性能更好的东西?

我想比较的情况是

FooDictionary.TryGetValue(Id, out var element) vs BarList.FirstOrDefault(x => x.Id == Id)

编辑:

我没有使用 Id 作为索引,实际上,我的 Id 是一个 Guid.NewGuid().

c# .net-core ienumerable
1个回答
1
投票

这取决于你的用例。 如果你将按顺序插入元素(即你的id将对应于索引),那么我会建议使用列表,因为尽管两个访问都应该在恒定的时间内运行,但列表索引几乎总是比哈希表查找更快。 然而,如果你将插入杂项ID(例如,你的ID将对应于索引),那么我建议使用List。1001, 17786, 234),那么字典将是理想的数据结构,因为恒定时间的查找永远比线性搜索快(以线性时间运行--即what .First 就可以了)。)

注意:如果你使用id作为索引,那么你可以简单地检查id是否在列表中,(id < list.Count()),然后再访问它。 使用LINQ也会更快,因为你不需要先访问键(就像使用Dictionary那样)。

© www.soinside.com 2019 - 2024. All rights reserved.