1

変更のリストを保存する 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;
    }
}

ただし、これは車輪の再発明のように感じます。すでにこれを行っているものはありますか?これは、他の誰かがすでに解決した問題のようです。

より良い方法はありますか?

4

1 に答える 1