這是一個簡單的問題。我有兩個串列 ListA 和 ListB 它們都充滿了帶有鍵的相同型別的物件,但是其他所有內容(除了鍵)都可以不同,值的大小等.....我想用 ListA 替換值它們匹配的 ListB 中的值(沒有 O(m n),因為我可以通過回圈內回圈輕松做到這一點)以及 ListB 中存在但 ListA 中不存在的值應該添加到 ListA,這可以是兩個我不介意的操作,但我想將難度保持在 O(n^2) 或 O(m n)以下
我嘗試使用相交但我不確定如何從那里繼續我可以獲得匹配的行,但是如何替換添加它們......超出了我的范圍。
uj5u.com熱心網友回復:
如果您的班級重寫Equalsand GetHashCode(比較Key)或/和實作IEqualityComparer<YourClass>,您可以使用Intersectand Except。但是,在這種情況下,您應該使用 (left-outer-)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 ...
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/535008.html
標籤:。网列表代替匹配相交
