雖然這樣做在一個單一的LINQ表達你所有的邏輯可以證明,有時代碼是如何聰明你:)只是更容易閱讀和遵守,如果你這樣做以更詳細的方式。所以,如果你不想使用LINQ,你可以創建自己的IComparer
類,其中包含您的自定義排序算法:
Public Class MyComparer
Implements IComparer(Of String)
Public Function Compare(ByVal x As String, ByVal y As String) As Integer Implements IComparer(Of String).Compare
Dim xParts() As String = x.Split("@"c)
Dim yParts() As String = y.Split("@"c)
'Get the integer value (after the @ symbol) of each parameter
Dim xValue As Integer = 0
Dim yValue As Integer = 0
If xParts.Length = 2 Then
Integer.TryParse(xParts(1), xValue)
End If
If yParts.Length = 2 Then
Integer.TryParse(yParts(1), yValue)
End If
'Compare y-to-x instead of x-to-y because we want descending order
Return yValue.CompareTo(xValue)
End Function
End Class
在這個例子中,IComparer是一個標準的.NET框架接口,它要實現在你的MyComparer
班。 Compare方法(由IComparer
定義)只需要兩個參數並對它們進行比較。如果x
小於y
(即x
以排列順序在y
之前),則該方法將返回負數(例如-1)。如果x
大於y
,它將返回一個正數(例如1)。如果x
和y
相等,則該方法將返回0。
在這種情況下,然而,因爲所有我們要做的是使用標準的整數排序,我們可以叫Integer.CompareTo其中比較兩個整數並返回視情況而定,爲負數,正數或零。
然後,當你調用Array.Sort
方法,你可以給它一個自定義的IComparer
對象,以便它使用您的自定義排序,而不是默認的行爲算法:
Dim arrayToSort() As String = New String() {"[email protected]", "[email protected]", "[email protected]", "[email protected]", "[email protected]"}
Array.Sort(arrayToSort, New MyComparer())
的Sort方法將使用IComparer
您給它執行排序的對象。每次需要比較數組中的兩個項目以查看哪個應該先到達時,它將調用MyComparer.Compare
並使用該方法返回的值來確定正確的排序。
您可以在代碼中隨處重複使用相同的MyComparer
類,您需要使用相同的算法對項目進行排序,這與LINQ方法相比具有另一個優勢。實現你自己的IComparer
類允許你做出各種非常強大的可定製的排序順序。
用於排序的正則表達式? – Oded
任何事情都應該很好 – atari400
您首先需要解釋排序規則。 – Oded