Comparable und Sortierung
Definieren Sie mit < eine Sortierreihenfolge.
Comparable und Sortierung ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist Comparable?
Comparable stellt für einen Typ Ordnungsoperatoren bereit: <, <=, >, >=. Durch die Konformität können Sie direkt sorted(), min() und max() aufrufen.
Konformität mit <
Sie müssen nur < implementieren; die übrigen Operatoren werden abgeleitet. (Auch Equatable ist erforderlich.)
struct Version: Comparable {
let major: Int
static func < (l: Version, r: Version) -> Bool { l.major < r.major }
}
print(Version(major: 1) < Version(major: 2)) // trueEinen Comparable-Typ sortieren
Bei Comparable benötigt sorted() keine Closure:
struct Score: Comparable {
let points: Int
static func < (l: Score, r: Score) -> Bool { l.points < r.points }
}
let sorted = [Score(points: 3), Score(points: 1), Score(points: 2)].sorted()
print(sorted.map { $0.points }) // [1, 2, 3]min und max inklusive
Comparable ermöglicht außerdem Hilfsfunktionen für Aggregationen:
struct Temp: Comparable {
let c: Int
static func < (l: Temp, r: Temp) -> Bool { l.c < r.c }
}
let temps = [Temp(c: 20), Temp(c: 5), Temp(c: 30)]
print(temps.min()!.c, temps.max()!.c) // 5 30Sortierung nach mehreren Schlüsseln
Um bei mehreren Feldern Gleichstände aufzulösen, vergleichen Sie sie innerhalb von < in der Reihenfolge ihrer Priorität mithilfe von Tupeln — Swift vergleicht Tupel lexikografisch.
Der Tupel-Vergleichstrick
Vergleichen Sie zuerst nach dem Nachnamen und dann nach dem Vornamen:
struct Person: Comparable {
let last: String
let first: String
static func < (l: Person, r: Person) -> Bool {
(l.last, l.first) < (r.last, r.first)
}
}
let p = [Person(last: "Lee", first: "Bo"), Person(last: "Lee", first: "An")].sorted()
print(p.map { $0.first }) // ["An", "Bo"]Sortieren ohne Comparable
Sie können jederzeit mit einer abschließenden Closure sortieren, auch wenn der Typ nicht Comparable ist:
struct Item { let name: String; let qty: Int }
let items = [Item(name: "B", qty: 2), Item(name: "A", qty: 5)]
let byQty = items.sorted { $0.qty > $1.qty }
print(byQty.map { $0.name }) // ["A", "B"]Absteigend sortieren
Kehren Sie den Vergleich um oder rufen Sie .reversed() auf:
let nums = [3, 1, 4, 1, 5]
print(nums.sorted(by: >)) // [5, 4, 3, 1, 1]
print(nums.sorted().reversed()) // [5, 4, 3, 1, 1]sorted im Vergleich zu sort
sorted() gibt ein neues Array zurück; sort() verändert das Array an Ort und Stelle (dafür ist ein var erforderlich):
var nums = [3, 1, 2]
nums.sort()
print(nums) // [1, 2, 3]
let copy = [3, 1, 2].sorted()
print(copy) // [1, 2, 3]Stabile Sortierung
Die Swift-Sortierung ist seit Swift 5 garantiert stabil: Gleiche Elemente behalten ihre relative Reihenfolge bei. Verlassen Sie sich darauf, wenn Sie vorhersehbare Sortierungen in mehreren Durchläufen benötigen:
let words = ["bb", "a", "cc", "d"]
let byLen = words.sorted { $0.count < $1.count }
print(byLen) // ["a", "d", "bb", "cc"] -- "a" before "d", "bb" before "cc"Nach einem Key Path sortieren
Sie können mit einer Closure sortieren, die eine beliebige Eigenschaft liest, ohne den gesamten Typ konform zu machen:
struct Player { let name: String; let score: Int }
let players = [Player(name: "A", score: 30), Player(name: "B", score: 50)]
let ranked = players.sorted { $0.score > $1.score }
print(ranked.map { $0.name }) // ["B", "A"]Schnelltest
Welchen einzelnen Operator müssen Sie implementieren, um Comparable zu entsprechen?
Zusammenfassung
Sie haben Comparable kennengelernt:
Comparablestellt Ordnungsoperatoren bereit; implementieren Sie nur<- Ermöglicht
sorted(),min()undmax()ohne Closure - Der Tupel-Vergleich ermöglicht eine einfache Sortierung nach mehreren Schlüsseln
sorted()gibt ein neues Array zurück;sort()verändert das Array; die Sortierung ist stabil
Als Nächstes: eigene Gleichheitssemantik.
Häufig gestellte Fragen
Ist die Lektion „Comparable und Sortierung“ kostenlos?
Ja — der vollständige Text von „Comparable und Sortierung“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Comparable und Sortierung“?
Definieren Sie mit < eine Sortierreihenfolge. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Comparable und Sortierung“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Synthetisiertes Equatable
- Hashable und hash(into:)
- Comparable und Sortierung
- Benutzerdefinierte Gleichheitssemantik