我有一个边缘列表,这些边缘由一个Point数组组成,一个包含坐标的类型。
我正在尝试删除作为另一条边的子集的任何边,即其中包含一条边的所有点的顺序,在另一条边上(尽管按顺序可以表示向后和向前)。
我正在努力想出一个解决方案,不需要四个嵌套for循环(循环通过边缘,再次循环通过边缘,循环通过第一个点,循环通过第二个点,比较)。有没有更快的方法处理这个?或者至少是一些不会那么糟糕的东西。
感谢。
编辑:这都是在C#中完成的。我还有一种方法可以将点相互比较以获得相等。
编辑:
如果这是一条线(假装数字是坐标)。
1 ----- ----- 2 3 4 ------ ------- ------- 5 6
这是由一些相同点组成的另一条线:
3 ------ ------ 4 5
第二个是第一个的子行,所以我想从列表中删除第二个。
答案 0 :(得分:1)
构造从每对点(即,段)到一组边和索引的集合的映射,其中边在该索引处具有该段。然后,遍历映射条目,遍历集合迭代第一条边,遍历集合迭代第二条边,并从给定索引开始向外比较它们。