在C#中过滤集合

我正在寻找一种非常快速的方法来过滤C#中的集合。我目前正在使用通用的List <object>集合,但是如果它们的性能更好,则可以使用其他结构。

当前,我只是创建一个新的List <object>并循环遍历原始列表。如果过滤条件匹配,我将副本放入新列表。

有一个更好的方法吗?有没有一种方法可以进行过滤,所以不需要临时列表?


慕田峪7331174
浏览 668回答 3
3回答

杨__羊羊

如果您使用的是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;在文件顶部导入。

长风秋雁

您可以使用IEnumerable消除临时列表的需要。public IEnumerable<T> GetFilteredItems(IEnumerable<T> collection){&nbsp; &nbsp; foreach (T item in collection)&nbsp; &nbsp; if (Matches<T>(item))&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; yield return item;&nbsp; &nbsp; }}其中Matches是您的过滤方法的名称。您可以像这样使用:IEnumerable<MyType> filteredItems = GetFilteredItems(myList);foreach (MyType item in filteredItems){&nbsp; &nbsp; // do sth with your filtered items}这将在需要时调用GetFilteredItems函数,在某些情况下,如果您不使用过滤后的集合中的所有项目,则可能会获得一些良好的性能。
打开App,查看更多内容
随时随地看视频慕课网APP