gpt4 book ai didi

c# - LINQ Contains 与 Intersect(与其他任何东西相比!)

转载 作者:行者123 更新时间:2023-12-02 09:07:13 25 4
gpt4 key购买 nike

我有一个很大的 EntityObjects IEnumerable 和一个很大的 IEnumerable 字符串,它们是对象的键。

我想获取仅包含键匹配的对象的新列表。目前我正在通过 Contains() 执行此操作 - 但看起来很慢?

class Foo {
string Key
string Prop1
int Prop2
decimal Prop3
Bar Prop4
Thing Prop5
Stuff Prop6
...more properties
}

IEnumerable<Foo> foos
IEnumerable<string> fooKeys

var matchedFoos = foos.Where(f => fooKeys.Contains(f.Key));

这有效并返回我所期望的结果,但似乎很慢,我认为必须有更好的方法?我在 Intersect 上看过一些帖子,但似乎是针对同一类型的枚举?

信息:

  • foos.Count() 大约 164,000
  • fooKeys.Count() 大约 75,000

最佳答案

  1. 您可能应该在数据库上进行搜索(使用 LINQ to Entities),而不是在应用程序上进行搜索(使用 LINQ to Objects)。

  2. 您可以更改 fooKeysHashSet<string> (如果还没有的话)制作 Contains()方法调用 O(1) 而不是 O(n):

    var keesSet = new HashSet<string>(fooKeys);
    var matchedFoos = foos.Where(f => keesSet.Contains(f.Key));

    但是对于这么大的集合,仍然需要相当多的时间来执行搜索。

关于c# - LINQ Contains 与 Intersect(与其他任何东西相比!),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20834189/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com