在Swift 5中,Array
有两个方法称为sorted()
和sorted(by:)
。第一个方法sorted()
的声明如下:
返回已排序的集合元素。
func sorted() -> [Element]
第二种方法
sorted(by:)
的声明如下:
使用给定的谓词作为元素之间比较的方式,返回集合的元素按顺序排列。
返回集合的元素,使用给定的谓词作为元素之间的比较方式进行排序。
func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]
#1. 对可比对象进行升序排序
如果你的集合中的元素类型符合 Comparable
协议,你可以使用 sorted()
来对其进行升序排序。以下 Playground 代码展示了如何使用 sorted()
:
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
static func ==(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID == rhs.fileID
}
static func <(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID < rhs.fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted()
print(sortedImages)
#2. 对于可比较的对象降序排序
如果你的集合中元素类型符合Comparable
协议,你需要使用sorted(by:)
对元素进行降序排序。
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
static func ==(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID == rhs.fileID
}
static func <(lhs: ImageFile, rhs: ImageFile) -> Bool {
return lhs.fileID < rhs.fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0 > img1
})
print(sortedImages)
#3. 对于无法比较的对象进行升序或降序排序
如果你的集合中的元素类型不符合Comparable
协议,那么你需要使用sorted(by:)
方法对其进行升序或降序排序。
class ImageFile: CustomStringConvertible {
let fileName: String
let fileID: Int
var description: String { return "ImageFile with ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
}
let images = [
ImageFile(fileName: "Car", fileID: 300),
ImageFile(fileName: "Boat", fileID: 100),
ImageFile(fileName: "Plane", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0.fileID < img1.fileID
})
print(sortedImages)
请注意,Swift 还提供了两种方法叫做
sort()
和
sort(by:)
,它们是
sorted()
和
sorted(by:)
的原地排序版本。
images.sortInPlace({ $0.fileID > $1.fileID })
操作? - Taylor M