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采用了什么算法?
谢谢 展开
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采用了什么算法?
谢谢 展开
2个回答
展开全部
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 更高效。
我们可以看 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 更高效。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询