1

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

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

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

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

有什么干净的方法可以做到这一点吗?

我需要类似的东西:

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

那可能吗?

4

1 回答 1

1

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

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

当然,如果可以接受创建新列表 - 取决于列表的大小!

于 2012-09-24T15:31:19.363 回答