0Pricing
Swift Academy · Lektion

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))  // true

Einen 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 30

Sortierung 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:

  • Comparable stellt Ordnungsoperatoren bereit; implementieren Sie nur <
  • Ermöglicht sorted(), min() und max() 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

  1. Synthetisiertes Equatable
  2. Hashable und hash(into:)
  3. Comparable und Sortierung
  4. Benutzerdefinierte Gleichheitssemantik
← Zurück zu Swift Academy