linq C#从列表中移除列表

bbuxkriu  于 2022-12-20  发布在  C#
关注(0)|答案(2)|浏览(267)

如果嵌套列表满足某些要求,是否有一种方便的方法可以将其从另一个列表中移除?例如,假设我们有一个站点集合,我们决定将每个站点集合称为一条路线。每条路线都位于列表中。然后我们决定将每条路线也放入列表中。
现在我们有了一个路由列表,如果有人认为某些类型的路由不应该包含在路由列表中,那么我该如何删除这些路由呢?下面是一些示例代码:
示例类

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的路由?

fhity93d

fhity93d1#

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

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

上面的代码段创建了一个新列表,因此会发生复制操作,这意味着性能和内存使用都会受到影响。最有效的方法是一开始就不要将这些项添加到列表中。
第二种最有效的方法是从列表中删除条目,而不是构建一个新条目,这样内存使用就不会受到太大影响:

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

raogr8fs2#

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

相关问题