Array.Sort 是 .NET 中對陣列進行排序最簡單、最常用的方式。它提供多種多載,支援單一陣列排序、雙陣列鍵值對應排序、部分區間排序,以及自訂比較邏輯。
以下 VB.NET 程式碼示範對字串陣列進行預設字母排序:
Dim names(3) As String
names(0) = "Howard, Ryan"
names(1) = "Allen, Ray"
names(2) = "Pujols, Albert"
names(3) = "Iverson, Allen"
' 排序前
For x = 0 To names.Length - 1
Console.WriteLine(x & ". " & names(x))
Next
Array.Sort(names)
' 排序後
For x = 0 To names.Length - 1
Console.WriteLine(x & ". " & names(x))
Next
輸出結果將由 Howard, Ryan、Allen, Ray... 變為依字母序排列的 Allen, Ray、Howard, Ryan、Iverson, Allen、Pujols, Albert。
Sort(Array):對整個一維陣列排序。Sort(Array, Array):依第一個陣列(鍵)排序第二個陣列(值)。Sort(Array, IComparer):使用自訂比較器排序。Sort(Array, Int32, Int32):只排序指定索引範圍。Sort(Array, Array, Int32, Int32):依鍵陣列對指定範圍的值陣列排序。Sort(Array, Int32, Int32, IComparer):指定範圍且使用自訂比較器。Sort(Array, Array, Int32, Int32, IComparer):完整控制鍵值對、範圍與比較邏輯。當需要根據數值鍵對應排序字串時,可使用雙陣列多載:
int[] keys = { 11, 3, 8, 5 };
string[] names = { "Howard, Ryan", "Allen, Ray", "Pujols, Albert", "Iverson, Allen" };
// 只對索引 1~2(第 2、3 個元素)排序
Array.Sort(keys, names, 1, 2);
執行後 names 陣列中對應 keys 為 3、8 的兩筆資料會被重新排序,其餘位置不變。
若要排序自訂類別(如 Person),該類別必須實作 IComparable 介面並提供 CompareTo 方法:
Public Class Person
Implements IComparable
Public Property FirstName As String
Public Property LastName As String
Public Function CompareTo(obj As Object) As Integer Implements IComparable.CompareTo
Dim other = DirectCast(obj, Person)
Return Me.FirstName.CompareTo(other.FirstName)
End Function
End Class
接著即可直接呼叫 Array.Sort(personArray),執行時會自動依 FirstName 排序。
Array.Sort 靈活強大,從簡單陣列到複雜鍵值對、部分排序、自訂比較皆能輕鬆應對。善用多載與介面,能大幅簡化排序邏輯程式碼。