9

特定の要件を満たしている場合、ネストされたリストを別のリストから削除する便利な方法はありますか? たとえば、ストップのコレクションがあり、各ストップのコレクションをルートと呼ぶことにしたとします。各ルートはリストに含まれています。次に、各ルートもリストに入れることにします。

ルートのリストができたので、特定の種類のルートをルート リストに含めるべきではないと誰かが判断しました。これらのルートを削除するにはどうすればよいですか? サンプルコードは次のとおりです。

例のクラス

public class Stops
{
    public Stops(int _param1, string _param2)
    {
        param1 = _param1;
        param2 = _param2;
    }

    public int param1 { get; set; }
    public string param2 { get; set; }
}

リストを作成する

List<List<Stops>> lstRoutes = new List<List<Stops>>();
List<Stops> lstStops = new List<Stops>();
List<Stops> lstMoreStops = new List<Stops>();

// Create some stops
for (int i = 0; i < 5; i++)
{
    lstStops.Add(new Stops(i, "some text"));
}

lstRoutes.Add(lstStops);

// Create some more stops
for (int i = 5; i < 10; i++)
{
    lstMoreStops.Add(new Stops(i, "some more text"));
}

lstRoutes.Add(lstMoreStops);

たとえば、6 より大きい param1 値を持つルートを lstRoutes から削除するにはどうすればよいですか?

4

2 に答える 2

9

最も簡単な方法 (リストだけでなく、すべての列挙型に適用できます):

lstRoutes = lstRoutes.Where(r => !r.Any(s => s.param1 > 6)).ToList();

これにより新しいリストが作成されるため、コピーが行われます。最も効率的な方法は、最初からこれらの項目をリストに「追加しない」ことです。2 番目に効率的な方法は、新しいリストを作成するのではなく、リスト自体から項目を削除することです。

lstRoutes.RemoveAll(r => r.Any(s => s.param1 > 6));
于 2013-03-23T02:01:38.907 に答える
0
List<Stops> stop = lstRoutes.Find(delegate(List<Stops> stp) { return stp.param1 > 6; });
于 2013-03-23T02:04:24.187 に答える