Tri personnalisé avec des fonctions
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 8 sur 54.
Alors que table.sort() fonctionne très bien pour des listes simples de nombres ou de chaînes de caractères, les données du monde réel sont souvent plus complexes. Vous pourriez avoir un tableau d'enregistrements de joueurs, d'articles d'inventaire ou de scores de jeu où chaque entrée est elle-même un tableau avec plusieurs champs.
Pour trier ces structures complexes, vous devez indiquer à table.sort() exactement comment comparer deux entrées. C'est là que les fonctions de comparaison personnalisées deviennent essentielles. Une fonction de comparaison prend deux éléments et renvoie true si le premier doit se placer avant le second dans l'ordre de tri.
Voici un exemple avec un tableau d'enregistrements de joueurs :
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Après le tri, le tableau players sera ordonné par score par ordre décroissant, avec Bob en premier (200), Charlie en deuxième (175) et Alice en troisième (150). La fonction de comparaison accède au champ score de chaque tableau de joueur pour déterminer leur ordre.
Vous pouvez trier par n'importe quel champ de votre choix—les noms par ordre alphabétique, les niveaux par ordre numérique, ou même combiner plusieurs critères.
Aide-mémoire
Pour trier des tables avec des structures de données complexes, utilisez une fonction de comparaison personnalisée avec table.sort(). La fonction de comparaison prend deux éléments et renvoie true si le premier doit se placer avant le second.
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)Ceci trie les joueurs par score dans l'ordre décroissant. Vous pouvez trier par n'importe quel champ de la structure de la table.
Essayez vous-même
Cette leçon ne comprend pas de défi de code.
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Logic & Flow
1Itération avancée des tables
Itérer avec pairs()Itérer avec ipairs()pairs() vs. ipairs()Récapitulatif - Fiche de personnage2Plus de fonctions de la bibliothèque table
table.concat()Construction de table & unpack()table.sort()Tri personnalisé avec des fonctionsRécapitulatif - Tableau des scores3Concepts avancés sur les fonctions
Retourner plusieurs valeursFonctions variadiques (...)Les fonctions comme valeurs de première classeFonctions anonymesQu'est-ce qu'une closure ?Récapitulatif - Gestionnaire d'événements simple