在Find,Single,First中,哪一个最快?
我想最小化从列表中检索单个唯一元素所需的时间。 哪一个是Find
, Single
和First
最快的方法? 请注意,搜索键是唯一的ID。
最快的 (对于大型集合)将使它们与Dictionary
键入并使用它。
Single
和First
做不同的事情; Single
总是迭代整个集合,即使它在列表的开头找到它,所以First
通常比Single
短,因为它短路。
First
会比Single
更快,因为它可以在找到匹配后立即终止。 另一方面,这意味着它不会validation只有一个项与谓词匹配。
Find
应该与First
一样快,但不太便于携带,因为它只能在列表上运行。 如果您一般使用LINQ,我会尝试坚持LINQ运算符,除非使用替代方案有明确的好处。
正如Marc所说,如果你要经常这样做,你应该使用Dictionary<,>
。 您可以使用ToDictionary
运算符轻松完成此操作:
var dictionary = list.ToDictionary(x => x.Id); // Now you can look up by ID really quickly
显然创建字典需要一些时间才能开始,所以如果你多次搜索,你只想这样做。
它们是不同的方法。 Find
在List
定义,它与Enumerable.cs
定义的First
几乎相同,作为IEnumerable
上的扩展方法。 如果找到一个条件项(它们不需要遍历整个集合),它们都将返回,因此它们具有轻微的性能差异。
Single
返回条件项,并且还保证此项是唯一满足条件的项。 所以在大多数情况下, Single
比First
/ Find
慢,因为它需要遍历集合。
作为现有答案的补充:List.Find比IEnumerable.First快得多,因为第一个可以在List的内部数组上运行。 后者必须通过IList接口。
上述就是C#学习教程:在Find,Single,First中,哪一个最快?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1011914.html