Swift数组排序

示例

var array = [3, 2, 1]

创建一个新的排序数组

至于Array符合SequenceType,我们使用内置的排序方法可以生成排序元素的新数组。

2.1 2.2

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

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

从Swift 3开始,它已重命名为sorted()。

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

将现有数组排序

至于Array符合MutableCollectionType,我们可以将其代替元素进行排序。

2.1 2.2

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

array.sortInPlace() // [1,2,3]
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)]

2.1 2.2
// 按高度排序地标(升序)
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)]

// 创建按名称排序的新地标数组
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)]
3.0
// 按高度排序地标(升序)
landmarks.sort {$0.metersTall < $1.metersTall}

// 创建按名称排序的新地标数组
let alphabeticalLandmarks =landmarks.sorted{$0.name < $1.name}

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