0Pricing
Swift Academy · Leçon

Comparable et tri

Définissez l’ordre avec < pour effectuer un tri.

Comparable et tri est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.

Qu’est-ce que Comparable ?

Comparable fournit à un type des opérateurs d’ordre : <, <=, >, >=. La conformité vous permet d’appeler directement sorted(), min() et max().

Adopter <

Vous devez uniquement implémenter < ; les autres opérateurs sont dérivés. (Equatable est également requis.)

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

Trier un type Comparable

Avec Comparable, sorted() n’a besoin d’aucune fermeture :

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 et max sans effort

Comparable permet également d’utiliser des fonctions d’agrégation :

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

Tri selon plusieurs clés

Pour départager plusieurs champs, comparez-les dans l’ordre de priorité à l’intérieur de < en utilisant des tuples — Swift compare les tuples par ordre lexicographique.

Astuce de comparaison de tuples

Comparez d’abord le nom de famille, puis le prénom :

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"]

Trier sans Comparable

Vous pouvez toujours trier avec une fermeture finale, même si le type n’est pas Comparable :

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"]

Tri décroissant

Inversez la comparaison ou appelez .reversed() :

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 et sort

sorted() renvoie un nouveau tableau ; sort() modifie le tableau sur place (une variable déclarée avec var est nécessaire) :

var nums = [3, 1, 2]
nums.sort()
print(nums)  // [1, 2, 3]
let copy = [3, 1, 2].sorted()
print(copy)  // [1, 2, 3]

Tri suffisamment stable

Le tri de Swift est garanti stable depuis Swift 5 : les éléments égaux conservent leur ordre relatif. Vous pouvez vous appuyer sur ce comportement pour obtenir des tris prévisibles en plusieurs passes :

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"

Trier selon un chemin de propriété

Vous pouvez trier avec une fermeture qui lit n’importe quelle propriété sans rendre le type entier conforme :

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"]

Vérification rapide

Quel est le seul opérateur que vous devez implémenter pour adopter Comparable ?

Récapitulatif

Vous avez découvert Comparable :

  • Comparable fournit les opérateurs d’ordre ; implémentez uniquement <
  • Permet d’utiliser sorted(), min() et max() sans fermeture
  • La comparaison de tuples facilite le tri selon plusieurs clés
  • sorted() renvoie un nouveau tableau ; sort() modifie le tableau ; le tri est stable

Ensuite : la sémantique d’égalité personnalisée.

Questions Fréquemment Posées

La leçon « Comparable et tri » est-elle gratuite ?

Oui — le texte complet de « Comparable et tri » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Comparable et tri » ?

Définissez l’ordre avec < pour effectuer un tri. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Swift Academy ?

Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Comparable et tri » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?

Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Equatable synthétisé
  2. Hashable et hash(into:)
  3. Comparable et tri
  4. Sémantique d’égalité personnalisée
← Retour à Swift Academy