如何使用List.RemoveAll在给定特定条件的情况下删除

本文关键字:特定条件 情况下 删除 何使用 List RemoveAll | 更新日期: 2023-09-27 18:35:49

我正在编写一个流体模拟,其中我需要为每个粒子提供一个半径内相邻粒子的列表,R。

如果有潜在邻居的列表,如何根据距离标准删除所有潜在邻居?

我目前正在使用 for 循环执行此操作,但这似乎缓慢且效率低下。
我目前在伪代码中的方法是:

temp = getPotentialNeighbors(point);
        foreach(Particle n in temp)
        {
            if(Distance(n.Pos,point.Pos)<radius)
                neighbors.Add(n);
        }

如何使用List.RemoveAll在给定特定条件的情况下删除

如果你想获取与谓词匹配的所有项目并将它们放入一个新列表中,你可以这样做:

var newList = temp.Where(p => Distance(p,point) < radius).ToList();

要从temp列表中删除项目,您可以这样做:

temp.RemoveAll(p => Distance(p,point) < radius); 

这将传递谓词to RemoveAll(),它将删除与谓词给出的条件匹配的所有项目。

关于性能,我认为这不会比带有循环的版本更好,但这更短、更容易。