對陣列進行排序

var array = [3, 2, 1]

建立一個新的排序陣列

由於 Array 符合 SequenceType ,我們可以使用內建排序方法生成排序元素的新陣列。

Version = 2.2

在 Swift 2 中,這是通過 sort() 方法完成的。

let sorted = array.sort()  // [1, 2, 3]

Version >= 3.0

截至 Swift 3,它已被重新命名為 sorted()

let sorted = array.sorted()  // [1, 2, 3]

對現有陣列進行排序

由於 Array 符合 MutableCollectionType ,我們可以對其元素進行排序。

Version = 2.2

在 Swift 2 中,這是使用 sortInPlace() 方法完成的。

array.sortInPlace() // [1, 2, 3]

Version >= 3.0

截至 Swift 3,它已更名為 sort()

array.sort() // [1, 2, 3]

注意:為了使用上述方法,元素必須符合 Comparable 協議。

使用自定義排序對陣列進行排序

你還可以使用閉包對陣列進行排序,以定義是否應該在另一個元素之前對其進行排序 - 這不僅限於元素必須為 Comparable 的陣列。例如,將 Landmark 作為 Comparable 沒有意義 - 但你仍然可以按高度或名稱對一系列地標進行排序。

struct Landmark {
    let name : String
    let metersTall : Int
}

var landmarks = [Landmark(name: "Empire State Building", metersTall: 443),
                 Landmark(name: "Eifell Tower", metersTall: 300),
                 Landmark(name: "The Shard", metersTall: 310)]

Version = 2.2

// sort landmarks by height (ascending)
landmarks.sortInPlace {$0.metersTall < $1.metersTall}

print(landmarks) // [Landmark(name: "Eifell Tower", metersTall: 300), Landmark(name: "The Shard", metersTall: 310), Landmark(name: "Empire State Building", metersTall: 443)]

// create new array of landmarks sorted by name
let alphabeticalLandmarks = landmarks.sort {$0.name < $1.name}

print(alphabeticalLandmarks) // [Landmark(name: "Eifell Tower", metersTall: 300), Landmark(name: "Empire State Building", metersTall: 443), Landmark(name: "The Shard", metersTall: 310)]

Version >= 3.0

// sort landmarks by height (ascending)
landmarks.sort {$0.metersTall < $1.metersTall}

// create new array of landmarks sorted by name
let alphabeticalLandmarks = landmarks.sorted {$0.name < $1.name}

注意:如果字串不一致,字串比較可能會產生意外結果,請參閱排序字串陣列