【发布时间】:2023-03-07 19:16:01
【问题描述】:
我有一个List 的节点,其中每个节点都有一些坐标。
public class Node
{
float x,y;
....
}
List<Node> myNodeList;
我需要从列表中删除与其相邻节点的距离小于给定阈值的每个节点。 我读了这篇 post 解释如何在迭代集合时从集合中删除元素。
我更喜欢使用RemoveAll 方式,而不是以相反的顺序迭代列表,因为我认为它更干净、更优雅。
我的问题是我需要访问当前项目的相邻元素,以计算距离。
有什么干净的方法可以做到这一点吗?
我需要类似的东西:
myNodeList.RemoveAll(item => DistanceLessThanThreshold (item.Value, nextNode) && DistanceLessThanThreshold (item.Value, prevNode);
这可能吗?
【问题讨论】:
-
如果太难看,写你自己的扩展方法以保持风格。
-
这里会有一些极端情况。例如,如果您删除列表中的第 4 项,那么以前的第 5 项现在是第 4 项。这个新的第 4 项应该像以前一样使用第 3 项,还是应该使用删除的第 4 项?我不是要解决你的问题,我只是提出这个事实,因为你的帖子不涉及这样的事情,所以别人的解决方案可能不是你的解决方案。
-
@seth flowers:是的,我知道边缘情况。我只是想知道是否有办法在迭代时访问相邻元素。我觉得会很好。
-
维护两个列表是否可行,一个包含迭代数据,第二个包含操作结果?这样您就不会修改迭代列表。
-
@Justin Skiles:嗯,我知道该怎么做。但是我的问题是在迭代时明确地重新访问相邻元素。我知道如何以其他方式做到这一点(实际上,我已经做到了)。
标签: c# collections predicate