2014-03-27 29 views
3

一個誰使用協議生成工具,我寫的人,報告了一個錯誤,我真的不能明白:「未能比較數組中的兩個元素」的排序列表

Failed to compare two elements in the array. 

我用一個SortedList持有的所有問題的協議,並與下面的排序方法,在一個特殊的比較器進行排序:

Public Function Compare(x As String, y As String) As Integer Implements IComparer(Of String).Compare 

    Dim val1BiggerVal2 As Integer = 0 

    Dim subkeysVal1 As String() = x.Split("_"c) 
    Dim subkeysVal2 As String() = y.Split("_"c) 
    Dim rxNumberOnly As Regex = New Regex("^[0-9]+$") 
    Dim leftTaskgroup, leftParent, leftKey, leftID, leftCompstring, rightTaskgroup, rightParent, rightKey, rightID, rightCompstring As String 
    leftCompstring = "" 
    For counter As Integer = 0 To subkeysVal1.Length - 5 
     leftCompstring &= subkeysVal1(counter) 
    Next 
    leftTaskgroup = subkeysVal1(subkeysVal1.Length - 4) 
    leftParent = subkeysVal1(subkeysVal1.Length - 3) 
    leftKey = subkeysVal1(subkeysVal1.Length - 2) 
    leftID = subkeysVal1(subkeysVal1.Length - 1) 

    rightCompstring = "" 
    For counter As Integer = 0 To subkeysVal1.Length - 5 
     rightCompstring &= subkeysVal2(counter) 
    Next 
    rightTaskgroup = subkeysVal2(subkeysVal2.Length - 4) 
    rightParent = subkeysVal2(subkeysVal2.Length - 3) 
    rightKey = subkeysVal2(subkeysVal2.Length - 2) 
    rightID = subkeysVal2(subkeysVal2.Length - 1) 

    val1BiggerVal2 = compareSubstring(leftCompstring, rightCompstring) 
    'If Components where the same, check Taskgroups 
    If (val1BiggerVal2 = 0) Then 
     val1BiggerVal2 = compareSubstring(leftTaskgroup, rightTaskgroup) 
    End If 
    'If Taskgroups where the same, check parent-child relation 
    If (val1BiggerVal2 = 0) Then 
     If rightKey = leftParent Then 
      val1BiggerVal2 = 1 
     ElseIf rightParent = leftKey Then 
      val1BiggerVal2 = -1 
     ElseIf rightParent = leftParent Then 
      val1BiggerVal2 = compareSubstring(leftKey, rightKey) 
     Else 
      Dim Left As String = leftParent 
      Dim Right As String = rightParent 
      If leftParent = "" Then 
       Left = leftKey 
      End If 
      If rightParent = "" Then 
       Right = rightKey 
      End If 

      val1BiggerVal2 = compareSubstring(Left, Right) 
     End If 
    End If 
    'if even the parent-child relation wasnt unquie, use the autoincremented endvalue 
    If val1BiggerVal2 = 0 Then 
     val1BiggerVal2 = leftID.compareTo(rightID) 
    End If 
    Return val1BiggerVal2 

End Function 

我覺得跟上次檢查,如果val1biggerVal2是0,我應該總是得到一個唯一的標識,因爲最後_ID是au每次我從輸入文件中讀取問題時都會增加。

回答

1

經過幾個小時的思考,並沒有進一步的線索,我決定簡單地用SortedDictionary數據結構替換我的SortedList
這解決了這個問題,但如果有人知道爲什麼版本與SortedList不起作用,請告訴我。