Mit Swift 5 hat Array
zwei Methoden namens sorted()
und sorted(by:)
. Die erste Methode, sorted()
, hat die folgende Deklaration:
Gibt die Elemente der Sammlung sortiert zurück.
func sorted() -> [Element]
Die zweite Methode, sorted(by:)
, hat die folgende Deklaration:
Gibt die Elemente der Sammlung sortiert zurück, wobei das gegebene Prädikat als Vergleich zwischen den Elementen verwendet wird.
func sorted(by areInIncreasingOrder: (Element, Element) throws -> Bool) rethrows -> [Element]
1. Sortieren mit aufsteigender Reihenfolge für vergleichbare Objekte
=====================================================================
Wenn der Elementtyp innerhalb Ihrer Sammlung dem Protokoll Comparable
entspricht, können Sie sorted()
verwenden, um Ihre Elemente in aufsteigender Reihenfolge zu sortieren. Der folgende Playground-Code zeigt, wie man sorted()
verwendet:
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile mit 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: "Auto", fileID: 300),
ImageFile(fileName: "Boot", fileID: 100),
ImageFile(fileName: "Flugzeug", fileID: 200)
]
let sortedImages = images.sorted()
print(sortedImages)
/*
gibt aus: [ImageFile mit ID: 100, ImageFile mit ID: 200, ImageFile mit ID: 300]
*/
2. Sortieren mit absteigender Reihenfolge für vergleichbare Objekte
====================================================================
Wenn der Elementtyp innerhalb Ihrer Sammlung dem Protokoll Comparable
entspricht, müssen Sie sorted(by:)
verwenden, um Ihre Elemente in absteigender Reihenfolge zu sortieren.
class ImageFile: CustomStringConvertible, Comparable {
let fileName: String
let fileID: Int
var description: String { return "ImageFile mit 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: "Auto", fileID: 300),
ImageFile(fileName: "Boot", fileID: 100),
ImageFile(fileName: "Flugzeug", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0 > img1
})
//let sortedImages = images.sorted(by: >) // funktioniert auch
//let sortedImages = images.sorted { $0 > $1 } // funktioniert auch
print(sortedImages)
/*
gibt aus: [ImageFile mit ID: 300, ImageFile mit ID: 200, ImageFile mit ID: 100]
*/
3. Sortieren mit aufsteigender oder absteigender Reihenfolge für nicht vergleichbare Objekte
=============================================================================================
Wenn der Elementtyp innerhalb Ihrer Sammlung dem Protokoll Comparable
NICHT entspricht, müssen Sie sorted(by:)
verwenden, um Ihre Elemente in aufsteigender oder absteigender Reihenfolge zu sortieren.
class ImageFile: CustomStringConvertible {
let fileName: String
let fileID: Int
var description: String { return "ImageFile mit ID: \(fileID)" }
init(fileName: String, fileID: Int) {
self.fileName = fileName
self.fileID = fileID
}
}
let images = [
ImageFile(fileName: "Auto", fileID: 300),
ImageFile(fileName: "Boot", fileID: 100),
ImageFile(fileName: "Flugzeug", fileID: 200)
]
let sortedImages = images.sorted(by: { (img0: ImageFile, img1: ImageFile) -> Bool in
return img0.fileID < img1.fileID
})
//let sortedImages = images.sorted { $0.fileID < $1.fileID } // funktioniert auch
print(sortedImages)
/*
gibt aus: [ImageFile mit ID: 300, ImageFile mit ID: 200, ImageFile mit ID: 100]
*/
Beachten Sie, dass Swift auch zwei Methoden namens sort()
und sort(by:)
als Gegenstücke von sorted()
und sorted(by:)
bereitstellt, wenn Sie Ihre Sammlung direkt sortieren müssen.