pairs() vs. ipairs()
Fait partie de la section Logic & Flow du Journey Lua de Coddy — leçon 3 sur 54.
Maintenant que vous avez appris à la fois pairs() et ipairs(), il est important de comprendre quand utiliser chacun d'eux. Le choix dépend entièrement de la structure de votre table et de ce que vous essayez d'accomplir.
Utilisez ipairs() lorsque vous avez une table de type liste avec des clés entières séquentielles commençant à 1. Il traite les éléments dans l'ordre et s'arrête à la première valeur nil, ce qui le rend parfait pour les tableaux où l'ordre est important.
Utilisez pairs() lorsque votre table possède des clés de type chaîne, des types de clés mixtes, ou lorsque vous avez besoin d'accéder à toutes les entrées indépendamment des lacunes. Il parcourt chaque paire clé-valeur de la table sans ordre spécifique.
Considérez ce tableau mixte :
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}Si vous utilisez ipairs(), vous ne verrez que les trois chaînes de niveau. Si vous utilisez pairs(), vous verrez les cinq entrées, y compris les clés de type chaîne.
Défi
FacileÉcrivez une fonction countSequentialItems qui prend une table data et renvoie le nombre d'éléments indexés par des entiers séquentiels.
Utilisez ipairs() pour compter combien d'éléments existent dans la partie séquentielle de la table (en commençant par l'index 1 jusqu'au premier nil). Cela vous aidera à comprendre la différence entre ipairs() et pairs() lors de l'utilisation de tables mixtes.
Paramètres :
data(table) : Une table mixte contenant à la fois des clés entières séquentielles et des clés de type chaîne de caractères
Retourne : Le nombre d'éléments séquentiels (nombre)
Aide-mémoire
Utilisez ipairs() pour les tables de type liste avec des clés entières séquentielles commençant à 1. Elle traite les éléments dans l'ordre et s'arrête à la première valeur nil :
for i, value in ipairs(myList) do
-- processes sequential items only
endUtilisez pairs() pour les tables avec des clés de type chaîne, des types de clés mixtes, ou lorsque vous avez besoin d'accéder à toutes les entrées indépendamment des interruptions dans la séquence. Elle itère à travers chaque paire clé-valeur sans ordre spécifique :
for key, value in pairs(myTable) do
-- processes all key-value pairs
endExemple avec une table mixte :
local gameData = {
"Level 1",
"Level 2",
"Level 3",
currentLevel = 2,
playerName = "Hero"
}
-- ipairs() only sees: "Level 1", "Level 2", "Level 3"
-- pairs() sees all five entriesEssayez vous-même
function countSequentialItems(data)
-- Écrivez le code ici
end
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