gpt4 book ai didi

c# - 比较两个列表时提高性能

转载 作者:行者123 更新时间:2023-11-30 13:37:44 25 4
gpt4 key购买 nike

在比较两个列表中的项目时,我有哪些选择?我遇到了一些性能问题,我想知道是否有更快的替代方案:

int[] foo = { 1, 2, 3, 4, 5 };
int[] bar = { 6, 7, 8, 9, 1 };

var result = foo.Any(x => bar.Contains(x));

无论我是使用 lambda 方法还是自己使用 foreach,我都认为性能损失仍然是 O(N^2)。我可以做些什么来影响它吗?

最佳答案

您可以使用 Enumerable.Intersect :

var result = foo.Intersect(bar).Any();

创建 Set<T>来自 bar项,然后枚举 foo直到找到第一个匹配项。在内部看起来像:

Set<int> set = new Set<int>();

foreach (int local in bar) // M times
set.Add(local); // O(1)

foreach (int value in foo) // N times max
{
if (!set.Remove(value)) // O(1)
continue;

yield return value;
}

正如 Patryk Ćwiek 正确指出的那样,这给了你 O(N+M) 而不是 O(N*M)

关于c# - 比较两个列表时提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21426042/

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