当前位置:  开发笔记 > 编程语言 > 正文

通用列表FindAll()与foreach

如何解决《通用列表FindAll()与foreach》经验,为你挑选了3个好方法。

我正在查看通用列表,以根据某个参数查找项目.

总的来说,什么是最好和最快的实施?
1.循环遍历列表中的每个项目,并将每个匹配保存到新列表并返回该列表

foreach(string s in list)
{ 
    if(s == "match")
    {
       newList.Add(s);
    }
} 

return newList;

或者
2.使用FindAll方法并向其传递委托.

newList = list.FindAll(delegate(string s){return s == "match";});

难道他们都不是在~O(N)中运行?这里最好的做法是什么?

此致,乔纳森



1> Egil Hansen..:

您绝对应该使用该FindAll方法或等效的LINQ方法.另外,如果可以,请考虑使用更简洁的lambda而不是您的委托(需要C#3.0):

var list = new List();
var newList = list.FindAll(s => s.Equals("match"));



2> casperOne..:

我会在这种情况下使用该FindAll方法,因为它更简洁,而且IMO具有更易读的可读性.

你是正确的,他们是非常要既为O执行(N)时,虽然foreach声明 稍微快给它不具有执行委托调用(委托承担,而不是直接调用方法略有开销) .

我必须强调这种差异是多么微不足道,除非你在庞大的名单上做大量的操作,否则它很可能永远不会有所作为.

与往常一样,测试以查看瓶颈在哪里并采取适当的行动.



3> matt_dev..:

乔纳森,

您可以在Linq To Action的第5章(性能考虑因素)中找到一个很好的答案.

它们为每次执行约50次的搜索测量a,并且每周期得出foreach = 68ms/List.FindAll =每周期62ms.真的,创建测试并亲眼看看可能符合您的利益.

推荐阅读
LEEstarmmmmm
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有