我正在编写一个流体模拟,我需要为每个粒子提供一个半径范围内的相邻粒子列表R.
如果有潜在邻居列表,我将如何根据距离标准删除所有潜在邻居?
我目前正在使用for循环执行此操作,但这似乎很慢且效率低 我在psuedo代码中的当前方法是:
temp = getPotentialNeighbors(point);
foreach(Particle n in temp)
{
if(Distance(n.Pos,point.Pos)<radius)
neighbors.Add(n);
}
答案 0 :(得分:2)
如果您希望获得与谓词匹配的所有项目并将它们放入新列表中,您可以这样做:
var newList = temp.Where(p => Distance(p,point) < radius).ToList();
要从temp
列表中删除项目,您可以这样做:
temp.RemoveAll(p => Distance(p,point) < radius);
这会传递谓词to RemoveAll()
,它将删除与谓词给出的条件匹配的所有项。
关于性能我不认为这会比带循环的版本更好,但这更短更容易。