访问List.RemoveAll谓词中的相邻元素



我有一个节点的List,其中每个节点都有一些坐标。

public class Node
{
float x,y;
....
}
List<Node> myNodeList;

我需要从列表中删除每个与其相邻节点的距离小于给定阈值的节点。我读了这篇文章,解释了如何在迭代时从集合中删除元素

我更喜欢使用RemoveAll的方式,而不是以相反的顺序迭代列表,因为我认为它更干净、更优雅。我的问题是,我需要访问当前项目的相邻元素,以计算距离。

有干净的方法吗?

我需要类似的东西:

myNodeList.RemoveAll(item => DistanceLessThanThreshold (item.Value, nextNode) && DistanceLessThanThreshold (item.Value, prevNode);

这可能吗?

您可以使用反向where,而不是在迭代时删除,并通过编写扩展方法removewhere来创建一个新列表,如-中所建议的

linq从属性等于值的对象数组中删除项

当然,创建一个新列表是否可以接受——这取决于列表的大小!