【发布时间】:2014-09-25 20:18:35
【问题描述】:
我有一个多边形列表和一个检查两个多边形是否相同的函数。我的问题是我只想添加此列表中找到的 n 个相同多边形中的一个。如果多边形是唯一的,那么它将被添加到唯一列表中。我怎样才能调整我的以下代码来做到这一点:
Dim bIdentical As Boolean = False
Dim bTwinAdded As Boolean = False
For Each outerEle As clsElement In liAllPolygons
'bTwinAdded = False
bIdentical = False
For Each innerEle As clsElement In liAllPolygons
If outerEle.Equals(innerEle) Then Continue For
If ClsMath.AreTwoPolygonsIdentical2(outerEle.Nodes, innerEle.Nodes) Then
bIdentical = True
Exit For
End If
Next
If Not bIdentical Then liUniquePolygons.Add(outerEle)
If bIdentical AndAlso Not bTwinAdded Then
liUniquePolygons.Add(outerEle)
bTwinAdded = True
End If
我简直想不出我能做什么。在 10 个多边形的列表中,数字 3 ,4 相同,数字 9, 10 相同,那么列表 liUniquePolygons 应该只得到数字 3 和数字 9 以及列表中的其余部分。使用上面的代码,对除数字 4、9 和 10 之外的所有多边形进行编号。
编辑:
1) 这种方式会抛出 Index Out Of Range 异常,因为列表成员的数量减少了。
For outerCount As Integer = 0 To liAllPolygons.Count - 1
'bTwinAdded = False
bIdentical = False
For innerCount As Integer = 0 To liAllPolygons.Count - 1
If liAllPolygons(outerCount).Equals(liAllPolygons(innerCount)) Then Continue For
If ClsMath.AreTwoPolygonsIdentical2(liAllPolygons(outerCount).Nodes, liAllPolygons(innerCount).Nodes) Then
liAllPolygons.RemoveAt(innerCount)
End If
Next
Next
2) 这会抛出 List Has Changed 的异常:
For Each outerEle as clsElement in liAllPolygons
'bTwinAdded = False
bIdentical = False
For Each innerEle as clsElement in liAllPolygons
If outerEle .Equals(innerEle ) Then Continue For
If ClsMath.AreTwoPolygonsIdentical2(outerEle .Nodes, innerEle.Nodes) Then
liAllPolygons.Remove(innerEle)
End If
Next
Next
【问题讨论】:
标签: vb.net