合并两个不同类型的列表

时间:2016-03-21 10:35:56

标签: c# list

我从另一个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?

1 个答案:

答案 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;
}

DistinctGroupByJoin操作使用散列,因此它们应该接近O(N)而不是O(N²)