C#中list<>定义的变量,我用foreach()循环查找 与 list<> .find 查找两个哪个效率高?后者是否用了算法

一种是我自己list<int>lams=newlist<int>;/*省略中间插入信息*/foreach(intiinlams){if(i==152)returni;}另... 一种是我自己
list<int> lams = new list<int>;
/*省略中间插入信息*/
foreach(int i in lams)
{
if(i == 152)
return i;
}
另一种是用list封装的方法find
lams.find ( delegate(int s) {return s== 152; } )

两种运算效率哪个比较高一点?
或者find采用了什么算法?
谢谢
展开
 我来答
然后去远足
2014-10-17 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2369万
展开全部
List<T>.Find() 本质还是循环遍历,不过它用了一层委托来包装。

我们可以看 MSDN 官方对于 List<T>.Find() 的定义:
【当前 List<T> 的元素被逐个传递给 Predicate<T> 委托,并在 List<T> 中向前移动,从第一个元素开始,到最后一个元素结束。当找到匹配项时处理即停止。】
参考:http://msdn.microsoft.com/zh-cn/library/x0b5b5bc.aspx

这样一来,如果集合很小,foreach 效率略微高一些;而如果集合很大,比如有十万行甚至更多行数据,Find() 委托会更快,且随着数据量增多后明显的更高效。

而 List<T>.FindAll() 的效率在集合很小时,明显的不如 foreach 效率;随着集合变大后,效率会慢慢变高,但不会比 foreach 更高效。
Beyond_Shan
2014-10-17 · TA获得超过1252个赞
知道小有建树答主
回答量:932
采纳率:40%
帮助的人:517万
展开全部
find 快一点 find是直接寻址了 foreach 还要先找对象 然后寻址 出结果 你可以用一个 几百万的 list实验一下就知道了
追问
谢谢哈,你说的也很对
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式