我的课程MyLines
有2个属性,StartPoint
和EndPoint
。
我还有List(Of MyLines)
Dim ListOfLines As New List(Of MyLines)
理论上,所有MyLines
都将在一端匹配为"系列的行" (如果这是有道理的)
我想在这个列表上做3个操作。
第一次操作:
如果任何MyLines.EndPoint
等于任何其他MyLines.Endpoint
,则应执行SwapEnds
以确保所有数据都按顺序排列。因为数据应该是SP,EP,SP,EP,SP,EP ......
第二次操作:
哪个MyLines.Startpoint
与其他任何MyLines.EndPoint
都不匹配MyLines
应该是新列表中的第一个
第三次操作:
然后,我想对剩余的MyLines
进行排序,以便每个MyLines.EndPoint
的{{1}}与下一个MyLines
的{{1}}匹配。
由于数据输入顺序不正确,我(已创建MyLines.StartPoint
方法,但我不知道如何检查)
寻找想法。我会在VB.net或C#中获取答案 提前致谢。 :)
MyLines
答案 0 :(得分:0)
保留列表open
仍然必须排序的行段和列出ordered
有序段。前者将是行段的初始列表,后者将开始为空。然后从任何线段开始,并尝试在两个方向上找到它的延续:
//Pseudo code
Move first entry from open to ordered
Dim foundNext As Boolean
Do 'Forward direction
foundNext = False
For Each segment in open
If open.Last().EndPoint = segment.StartPoint
move segment from open to end of ordered
FoundNext = True
Continue While
Else If open.Last().EndPoint = segment.EndPoint
segment.Swap()
move segment from open to end of ordered
FoundNext = True
Continue While
End If
Next
While foundNext
Do 'Backward direction
foundNext = False
For Each segment in open
If open.First().StartPoint = segment.EndPoint
move segment from open to beginning of ordered
FoundNext = True
Continue While
Else If open.Last().StartPoint = segment.StartPoint
segment.Swap()
move segment from open to beginning of ordered
FoundNext = True
Continue While
End If
Next
While foundNext