C#从列表中删除列表

时间:2013-03-23 01:58:55

标签: c# linq

如果符合某些要求,是否有方便从其他列表中删除嵌套列表?例如,假设我们有一组止损,我们决定将每个止损集合称为一条路线。每条路线都在列表中。然后我们决定将每条路线放入一个列表中。

现在我们有一个路由列表,有人决定某些类型的路由确实不应该包含在路由列表中。我该如何删除这些路线?这是一些示例代码:

示例类

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);

如何从lstRoutes中删除任何路径,例如,任何param1值大于6?

2 个答案:

答案 0 :(得分:7)

最简单的方式(可适用于所有枚举,而不仅仅是列表):

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

这将创建一个新列表,以便进行复制。最有效的方法是首先将这些项“添加”到列表中。第二个最有效的方法是从列表中删除项目,而不是构建一个新项目:

lstRoutes.RemoveAll(r => r.Any(s => s.param1 > 6));

答案 1 :(得分:0)

List<Stops> stop = lstRoutes.Find(delegate(List<Stops> stp) { return stp.param1 > 6; });