3

ここでlinqに関する基本的な問題が発生しています。これは繰り返しループで解決できますが。linqでこれをどのように実行できるかを知りたいと思っています。

私は2つのリストを持っています。

List<string> a  = new List<string>{"a","b","c","d","e","f"};
List<string> b = new List<string> { "a", "b", "c", "x", "y", "z" };

リストaと比較したいのですが、bのどの要素がaにあるかを比較します。その要素をbから削除したいと思います。言い換えると、リストaからの比較に基づいてbから{"a"、 "b"、 "c"}を削除し、リストbに{"x"、 "y"、"z"}のみを含めたいと考えています。これを解決するための単一のステートメントlinqはありますか?

4

1 に答える 1

7

(これはほんの数日前の別の投稿の複製であると確信していますが、見つかりません...)

変更が必要な場合は、次を使用できますList<T>.RemoveAll

b.RemoveAll(x => a.Contains(x));

またはより効率的に(リストが大きい場合):

HashSet<string> set = new HashSet<string>(a);
b.RemoveAll(set.Contains);

コレクションを適切に変更することはLINQでは慣用的ではないことに注意してください。そのため、上記では.NET2リスト固有の方法を使用しています。

bまたは、代わりに新しいリストを参照するように変更したい場合は、LINQを使用できます。

b = b.Except(a).ToList();
于 2012-08-06T06:15:03.150 に答える