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

时间:2012-09-24 15:07:01

标签: c# collections predicate

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

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

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

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

有没有干净的方法呢?

我需要类似的东西:

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

这可能吗?

1 个答案:

答案 0 :(得分:1)

而不是在迭代时删除你可以使用反向where并通过编写扩展方法removewhere创建一个新列表 - 如< - p>中所示

linq remove item from object array where property equals value

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