为了账号安全,请及时绑定邮箱和手机立即绑定

在C#中过滤集合

在C#中过滤集合

C#
慕田峪7331174 2019-11-29 10:45:44
我正在寻找一种非常快速的方法来过滤C#中的集合。我目前正在使用通用的List <object>集合,但是如果它们的性能更好,则可以使用其他结构。当前,我只是创建一个新的List <object>并循环遍历原始列表。如果过滤条件匹配,我将副本放入新列表。有一个更好的方法吗?有没有一种方法可以进行过滤,所以不需要临时列表?
查看完整描述

3 回答

?
杨__羊羊

TA贡献1943条经验 获得超7个赞

如果您使用的是C#3.0,则可以使用linq,效果更好,更优雅:


List<int> myList = GetListOfIntsFromSomewhere();


// This will filter out the list of ints that are > than 7, Where returns an

// IEnumerable<T> so a call to ToList is required to convert back to a List<T>.

List<int> filteredList = myList.Where( x => x > 7).ToList();

如果找不到.Where,则意味着您需要using System.Linq;在文件顶部导入。


查看完整回答
反对 回复 2019-11-29
?
长风秋雁

TA贡献1757条经验 获得超7个赞

您可以使用IEnumerable消除临时列表的需要。


public IEnumerable<T> GetFilteredItems(IEnumerable<T> collection)

{

    foreach (T item in collection)

    if (Matches<T>(item))

    {

        yield return item;

    }

}

其中Matches是您的过滤方法的名称。您可以像这样使用:


IEnumerable<MyType> filteredItems = GetFilteredItems(myList);

foreach (MyType item in filteredItems)

{

    // do sth with your filtered items

}

这将在需要时调用GetFilteredItems函数,在某些情况下,如果您不使用过滤后的集合中的所有项目,则可能会获得一些良好的性能。


查看完整回答
反对 回复 2019-11-29
  • 3 回答
  • 0 关注
  • 667 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号