Tri personnalisé
Fait partie de la section Logique et flux d’exécution du Journey GDScript de Coddy. Leçon 51 sur 78.
sort() place un tableau dans l’ordre croissant et modifie le tableau lui-même. Les nombres vont du plus petit au plus grand, et les chaînes suivent le même ordre que min(), les majuscules d’abord. reverse() donne ensuite l’ordre décroissant :
var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]Pour tout autre ordre, appelez sort_custom() avec une fonction de comparaison. Elle reçoit deux éléments, a et b, et renvoie true lorsque a doit venir avant b. Passez la fonction par son nom, sans parenthèses :
func by_length(a: String, b: String) -> bool:
return a.length() < b.length()
func _ready():
var words := ["banana", "fig", "kiwi"]
words.sort_custom(by_length)
print(words) # ["fig", "kiwi", "banana"]La comparaison peut examiner les éléments. Celle-ci place en premier le dictionnaire qui a le plus de "hp" :
func by_hp(a: Dictionary, b: Dictionary) -> bool:
return a["hp"] > b["hp"]Le tri n’est pas stable : les éléments considérés comme égaux peuvent se retrouver dans n’importe quel ordre. Lorsque les égalités comptent, compare un second champ lorsque le premier est égal :
func by_score_then_name(a: Dictionary, b: Dictionary) -> bool:
if a["score"] != b["score"]:
return a["score"] > b["score"]
return a["player"] < b["player"]sort_custom() existe sur Array, mais pas sur le PackedStringArray que renvoie split() ; convertissez-le donc d’abord avec Array(...). Vous rencontrerez également la comparaison écrite en ligne, comme dans sort_custom(func(a, b): return a > b). Cette forme est une lambda, abordée dans le chapitre Fonctions avancées.
Défi
FacileLe programme lit deux lignes : des nombres entiers séparés par des espaces et des mots séparés par des espaces. Le code fourni les stocke dans numbers (un tableau d’entiers) et words (un tableau de chaînes de caractères).
- Écrivez une fonction de comparaison
by_length(a: String, b: String) -> boolau niveau supérieur. Le mot le plus court vient en premier, et les mots de même longueur sont classés par ordre alphabétique. - Affichez quatre lignes : les nombres par ordre croissant, les nombres par ordre décroissant, les mots par ordre alphabétique (avec
sort()) et les mots triés avecsort_custom(by_length).
Pour les entrées 5 3 8 1 2 et elephant cat dolphin bee, la sortie est :
Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]Essayez vous-même
extends Node
# Écrivez la fonction de comparaison by_length() ici
func _ready():
var numbers: Array[int] = []
for text in OS.read_string_from_stdin().split(" ", false):
numbers.append(int(text))
var words := Array(OS.read_string_from_stdin().split(" ", false))
# Triez les tableaux et affichez les quatre lignes
pass
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logique et flux d’exécution
1Les chaînes de caractères en profondeur
Méthodes des chaînesRechercher dans les chaînesRemplacer et supprimer les espacesDécouper et joindreRécapitulatif - Vérifier un nom d’utilisateur4Dictionnaires, partie 2
Dictionnaires imbriquésTableaux de dictionnairesFusionner des dictionnairesCopier des dictionnairesRécapitulatif - Compteur de fréquence7Énumérations
Qu’est-ce qu’une énumération ?Définir une énumérationValeurs d’une énumérationÉnumérations avec matchRécapitulatif - Feu de circulation10Fonctions avancées
Renvoyer plusieurs valeursFonctions lambda, partie 1Fonctions lambda, partie 2Récapitulatif - Tri avec lambdaFonctions récursives, partie 1Fonctions récursives, partie 2Récapitulatif - Somme d’un tableau imbriqué13Système de gestion des stocks
Présentation du projetAjouter un article2Prise de décision avancée
Correspondance avec des variablesGardes de correspondanceMotifs de tableauMotifs de dictionnaireVérifications d’appartenanceRécapitulatif – Analyseur de commandes5Application de carnet d’adresses
Afficher le menuAjouter un contact8Gestionnaire des dossiers étudiants
Aperçu du projetAjouter un étudiant3Tableaux multidimensionnels
Bases des tableaux 2DAccéder aux éléments d’un tableau 2DBoucles imbriquées avec des tableaux 2DRécapitulatif - Tableaux 2DTableaux irréguliersMotifs courants des tableaux 2DRécapitulatif - Plateau de jeu6Les ensembles avec les dictionnaires
Qu’est-ce qu’un ensemble ?Un dictionnaire comme ensembleAjouter et supprimerUnion et intersectionDifférence d’ensemblesRécapitulatif – Supprimer les doublons9Agrégation avancée de données
Additionner des valeursTrouver le minimum et le maximumTri personnaliséRécapitulatif - Trieur de dictionnairesEntraînez-vous par vous-même : Compilateur GDScript en ligne