我从另一个List中向List的对象添加数据:
public void MergeLsts(List<A> lstA, List<B> lstB)
{
foreach (A dataA in lstA)
{
foreach (B dataB in lstB)
{
if (dataA.ItemNo == dataB.ItemNo)
{
//dataA.ItemDescription is up to this point empty!
dataA.ItemDescription = dataB.ItemDescription;
}
}
}
DoSomethingWithTheNewLst(lstA);
}
这完全没问题。然而,它需要很长时间,因为两个列表都非常大(lstA中大约70k项目和lstB中大约20k项目。)
我想知道是否有更快或更有效的方法来完成我需要的东西?也许用LINQ?
答案 0 :(得分:2)
您可以使用O(n)
复杂度而不是O(N²)
Join()
执行此操作:
var joinedData = dataA.Join(dataB, dA => dA.ItemNo, dB => dB.ItemNo, (dA, dB) => new { dA, dB }));
foreach(var pair in joinedData)
{
pair.dA.ItemDescription = pair.dB.ItemDescription;
}
Distinct
,GroupBy
和Join
操作使用散列,因此它们应该接近O(N)
而不是O(N²)
。