1. ホーム
  2. c#

[解決済み] 一般的なリストを繰り返しながら、そのリストから要素を削除するには?

2022-03-19 06:17:10

質問

より良いものを探しています。 パターン は、 要素のリストを処理し、その結果に応じてリストから削除するためのものです。

を使用することはできません。 .Remove(element) の中に foreach (var element in X) (になるため)。 Collection was modified; enumeration operation may not execute. 例外)...も使えません。 for (int i = 0; i < elements.Count(); i++).RemoveAt(i) との相対的な位置関係が崩れるからです。 i .

このようなエレガントな方法はあるのでしょうか?

どのように解決するのですか?

forループでリストを逆引きします。

for (int i = safePendingList.Count - 1; i >= 0; i--)
{
    // some code
    // safePendingList.RemoveAt(i);
}

var list = new List<int>(Enumerable.Range(1, 10));
for (int i = list.Count - 1; i >= 0; i--)
{
    if (list[i] > 5)
        list.RemoveAt(i);
}
list.ForEach(i => Console.WriteLine(i));

あるいは RemoveAll メソッド に対してテストする述語を指定します。

safePendingList.RemoveAll(item => item.Value == someValue);

以下、簡略化した例で説明します。

var list = new List<int>(Enumerable.Range(1, 10));
Console.WriteLine("Before:");
list.ForEach(i => Console.WriteLine(i));
list.RemoveAll(i => i > 5);
Console.WriteLine("After:");
list.ForEach(i => Console.WriteLine(i));