次のリストがあり、linqを使用して指定されたインデックス番号からすべての要素を削除するにはどうすればよいですか?
List<string> a = new List<string>();
a.Add("number1");
a.Add("number2");
a.Add("number3");
linqを使用して、インデックス番号=2の要素を除くすべての要素を削除するにはどうすればよいですか。
LINQ は物を削除することではなく、クエリを実行することです。
RemoveRange
ただし、リストからアイテムの範囲を削除するために呼び出すことができます。そう:
a.RemoveRange(0, 2);
「number3」だけを残します。
または、dasblinkenlight の回答に従って新しいリストを作成することもできます。達成しようとしていること、および LINQ がソリューションであると考える理由について詳しく教えていただければ、さらにお役に立てる可能性があります。
編集:さて、要件が明確になりました。LINQ を使用できます。
var newList = a.Where((value, index) => index != 2)
.ToList();
保持したいインデックスのリストがあると仮定すると、 with を使用Where
しindex
てフィルタリングできます。
var indexList = new[] {2};
var result = a.Where((s, index) => indexList.Contains(index));
「X以外のすべてを削除する」と同等の操作は「Xを保持する」です。2
これを行う最も簡単な方法は、次のように、インデックスに単一の要素を持つ新しいリストを作成することです。
a = new List<string>{a[2]};
@dasblinkenlightの答えはより良い選択肢ですが、ここにlinq(または少なくとも1回の反復)があります
a.Where((item,index) => b1 == 2);
またはIEnumberableではなく単一の文字列オブジェクトを返す
a.Where((a1,b1) => b1 == 2).First();