変更のリストを保存する Web ページがあるので、保存アクションには 2 つのリストがあり、1 つは新しい値、もう 1 つは既存の値です。
したい:
- 統合されたリストと重複排除されたリストの両方をループします。
- 既存のリストではなく、新しいリストのどこに新しいアイテムを追加したいですか。
- 両方のリストのどこでスキップしたいですか。
- 新しいリストではなく、既存のリストのどこでアイテムを削除したいですか。
これを行うメソッドをノックアップするのは簡単です。
public static IEnumerable<UnionCompared<T>> UnionCompare<T>(
this IEnumerable<T> first, IEnumerable<T> compare, IEqualityComparer<T> comparer = null)
{
// Create hash sets to check which collection the element is in
var f = new HashSet<T>(first, comparer);
var s = new HashSet<T>(compare, comparer);
// Use Union as it dedupes
var combined = first.Union(compare, comparer);
foreach (var c in combined)
{
// Create a type that has the item and a flag for which collection it's in
var retval = new UnionCompared<T>
{
Item = c,
InFirst = f.Contains(c),
InCompare = s.Contains(c)
};
yield return retval;
}
}
ただし、これは車輪の再発明のように感じます。すでにこれを行っているものはありますか?これは、他の誰かがすでに解決した問題のようです。
より良い方法はありますか?