对数组进行排序
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}
注意:如果字符串不一致,字符串比较可能会产生意外结果,请参阅排序字符串数组 。