按两个值对我的类进行排序

时间:2016-09-17 12:06:59

标签: c# vb.net linq sorting

我的课程MyLines有2个属性,StartPointEndPoint

我还有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

1 个答案:

答案 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