次のクラスの 2 つのリスト (ObservableCollections) があります。
public class Data
{
public string Key { get; set; }
public string Value { get; set; }
}
1 つは古いオブジェクト ( listA
) を表し、2 番目は更新されたオブジェクト ( ) を表しlistB
ます。参照を壊さずに からlistB
への新しいデータをマージしたい。listA
より正確には、次のことを行いたいです。
listA
に存在しないすべてのオブジェクトから削除しますlistB
(オブジェクトはプロパティで比較されKey
ます)- に存在しない
listA
すべてのオブジェクトに追加listB
listA
- 両方のリストに存在する
Value
すべてのオブジェクトのプロパティを更新しますlistA
それを行うための効率的な方法を提案できますか?私の解決策は大きく、非常に効果がないようです。
更新: 現在の解決策は次のとおりです。
public void MergeInstanceList(List<Instance> instances)
{
var dicOld = Instances.ToDictionary(a => a.Ip);
var dicNew = instances.ToDictionary(a => a.Ip);
var forUpdate = instances.Intersect(Instances, new Comparer()).ToList();
Instances.Where(a => !dicNew.Keys.Contains(a.Ip)).ToList().ForEach(a => Instances.Remove(a));
instances.Where(a => !dicOld.Keys.Contains(a.Ip)).ToList().ForEach(a => Instances.Add(a));
forUpdate.ForEach(a => dicOld[a.Ip].Name = a.Name);
}
public class Comparer : IEqualityComparer<Instance>
{
public bool Equals(Instance x, Instance y)
{
return x.Ip == y.Ip;
}
public int GetHashCode(Instance obj)
{
return obj.Ip.GetHashCode();
}
}