如何使用List.RemoveAll删除给定的特定条件

时间:2014-12-30 12:35:50

标签: c# list

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

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

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

temp = getPotentialNeighbors(point);

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

1 个答案:

答案 0 :(得分:2)

如果您希望获得与谓词匹配的所有项目并将它们放入新列表中,您可以这样做:

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

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

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

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

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