對陣列進行排序
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}
注意:如果字串不一致,字串比較可能會產生意外結果,請參閱排序字串陣列 。