gpt4 book ai didi

c# - 在 C# 中迭代​​泛型列表时出现性能问题

转载 作者:行者123 更新时间:2023-11-30 14:00:40 25 4
gpt4 key购买 nike

假设我们有这些具有一些共同属性的业务对象:

public class A
{
// Properties in common
public int Common { get; set; }
public string aValue { get; set; }
// Some other goes here.
}

public class B
{
// Properties in common
public int Common { get; set; }
public string bValue { get; set; }

// Some other goes here.
}

在我们的业务逻辑中,我们有两个列表,如下所示:

List<A> aList = new List<A>();
List<B> bList = new List<B>();

(假设我们有这些列表,每个列表至少填充了 100 个实例)好的,让我们从我们的问题开始,我们需要遍历 aList 以便为 bList 中的每个实例设置一个属性,该属性当然与公共(public)属性匹配,如下所示:

foreach (A a in aList)
{
B b = bList.Find(x => x.Common == a.Common);
if (b != null)
b.bValue = a.aValue;
}

有没有人知道改进此操作的更好方法,因为它导致我们的应用程序需要太多时间才能完成?

谢谢,

最佳答案

这执行得不好,因为列表上的 Find 是线性的。生成的算法是 O(n^2)

你应该从 bList 中的公共(public)属性创建一个 Dictionary,并通过键查找而不是使用 Find 搜索;字典查找是 O(1) 摊销的,因此它会使您的算法在列表长度上呈线性。

var dict = bList.ToDictionary(b => b.Common);
foreach (A a in aList) {
B b;
if (dict.TryGetValue(a.Common, out b) {
b.bValue = a.aValue;
}
}

关于c# - 在 C# 中迭代​​泛型列表时出现性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201168/

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