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

如何从 lstRoutes 中删除任何 param1 值大于 6 的路由?

4

2 回答 2

9

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

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

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

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 回答