.NET替换键匹配的值

hgc7kmma  于 2022-11-19  发布在  .NET
关注(0)|答案(1)|浏览(136)

这是一个简单的问题。我有两个列表ListA和ListB,它们都是相同类型的对象,都有键,但其他的都是(除键外)、大小、值等都可以不同.....我想将ListA中的值替换为与之匹配的ListB中的值(没有O(m*n),因为我可以很容易地用循环中的循环来实现),并且应该将确实存在于ListB中但不存在于ListA中的值添加到ListA中,时间复杂度为O(n),所以时间复杂度为O(n *n)。
我尝试使用intersect,但我不知道如何从那里继续前进,我可以得到匹配的行,但如何取代添加他们...是超越我。

6xfqseft

6xfqseft1#

如果你的类重写了EqualsGetHashCode(以比较Key)或/和实现了IEqualityComparer<YourClass>,你可以使用IntersectExcept。但是,在这种情况下,你应该使用(左外)Join,这也是一种基于集合的方法:

var query =
    from b in listB
    join a  in listA on b.Key equals a.Key into ba
    from a_join in ba.DefaultIfEmpty()
    select (OnlyInB: a_join == null, A: a_join, B: b);
    

foreach(var x in query)
{
    if(x.OnlyInB)
    {
        listA.Add(x.B);
    }
    else
    {
        CompareAndTransferProperties(x.A, x.B);
    }
}

和一个方法CompareAndTransferProperties,它的作用正如它的名字所暗示的那样:

private static void CompareAndTransferProperties(MyClass a, MyClass b)
{
    // your task ...
}

相关问题