对数组进行排序

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}

注意:如果字符串不一致,字符串比较可能会产生意外结果,请参阅排序字符串数组