ジェネリックリストと比較して、不一致の値をフィルタリングしたいと思います。現在foreachループを使用していますが、ラムダ式を使用してこれを解決する方法があるかどうか知りたいですか?以下の例では、「4」のみを含む結果のリストが必要です。
List<string> foo = new List<string>() { "1", "2", "3" };
List<string> bar = new List<string>() { "1", "2", "3", "4" };
LinqExcept<>
拡張機能を使用します。
var result = bar.Except(foo);
内部的には、これによりすべてがfoo
(にSet<>
類似した内部.Netタイプ)に追加され、正常に追加されたHashSet<T>
すべてのアイテムが生成されます。bar
注-大文字と小文字を区別しない比較が必要な場合は、特定のStringComparer
:を渡すことができます。
var result = bar.Except(foo, StringComparer.OrdinalIgnoreCase);
結果はであり、他の多くのLinq拡張メソッドと同様に、またはなどを呼び出して結果を反復または「実現」するIEnumerable<string>
まで、何も実行を開始しません。foreach
ToArray
ToList
2回使用したくない場合はExcept
、次のように検討してください。
var listOld = new SortedSet<string> { "1", "2", "3", "4", };
var listNew = new SortedSet<string> { "1", "1½", "2", "4", "5", };
次に、単に言う
listNew.SymmetricExceptWith(listOld);
listNew
2つの元のリスト間の「差異要素」が含まれるように変更されます。