我有一个对象集合,我想检索所有具有其属性之一匹配搜索字符串的对象。到目前为止,我已经尝试了几种过滤方法,即List.ForAll、IEnumerable.Where和ParallelQuery.Where。
List<Foo> cache = GetAllObjs(); // source list containing lots of objects备选案文1:
List<Foo> foos = cache.AsParallel().Where(x => x.Name == "bar").ToList();备选案文2:
List<Foo> foos = cache.Where(x => x.Name == "bar").ToList();备选方案3:
List<Foo> foos = cache.FindAll(x => x.Name == "bar");因为ParallelQuery.Where使用多个核,所以它似乎是最快的解决方案。除此之外,还有其他过滤方法,例如使用不同的集合类型或筛选函数吗?源集合不必是列表。
发布于 2016-02-12 21:54:22
除此之外,还有其他过滤方法,例如使用不同的集合类型或筛选函数吗?
如果可以有多个具有相同名称的对象,则可以使用Lookup<string, Foo>。您可以将查找看作是string -> List<Foo>字典:
// create
var foosByName = GetAllObjs().ToLookup(x => x.Name, x => x);
// search
var barFoos = foosByName["bar"].ToList();当然,如果每个名称只有一个Foo,那么将提供一个经典的Dictionary<string, Foo>。
在字典或查找中搜索(通常)是O(1)操作,而问题中的搜索方法是O(n)。
https://stackoverflow.com/questions/35372743
复制相似问题