在Find,Single,First中,哪一个最快?

xpo*_*ort 20 c#

我想最小化从列表中检索单个唯一元素所需的时间.哪一个是最快的方法Find,SingleFirst?请注意,搜索键是唯一的ID.

Mar*_*ell 31

最快(为一大组)将让他们键控反对Dictionary<TKey,TValue>并使用它.

SingleFirst做不同的事情; Single总是迭代整个集合,即使它在列表的开头找到它,因此First通常比Single它短路时更快.


Jon*_*eet 27

FirstSingle它更快,因为它可以在找到匹配后立即终止.另一方面,这意味着它验证只有一个项与谓词匹配.

Find应该尽可能快First,但不太便携,因为它只适用于列表.如果您一般使用LINQ,我会尝试坚持使用LINQ运算符,除非使用替代方案有明确的好处.

正如马克所说,如果你要经常这样做,你应该使用Dictionary<,>.您可以使用ToDictionary操作员轻松完成此操作:

var dictionary = list.ToDictionary(x => x.Id);
// Now you can look up by ID really quickly
Run Code Online (Sandbox Code Playgroud)

显然,创建词典需要一些时间才能开始,所以你只需要做到这一点,如果你正在寻找多次.