Signatures d'index
Fait partie de la section Introduction à Luau du Journey Lua de Coddy — leçon 72 sur 73.
Vous avez rencontré des types de maps comme {[string]: number} dans le chapitre sur les tables — une signature d'indexation : n'importe quel type de clé string s'associe à une valeur number. Ils excellent lorsque les clés ne sont pas connues lors de l'écriture du code : compteurs, paramètres, caches, scores — tout ce qui est construit au moment de l'exécution.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- n'importe quelle clé string est autorisée
counts["sword"] = 1
counts["potion"] += 1 -- les valeurs sont vérifiées en tant que nombresDeux faits au moment de l'exécution sont importants lors du travail avec des maps. Premièrement, lire une clé qui n'a jamais été définie renvoie nil — le motif de comptage classique gère cela avec or, transformant ce qui est missing en 0 :
counts[item] = (counts[item] or 0) + 1Deuxièmement, pairs() parcourt les clés d'une map sans aucun ordre garanti — exécuter le même programme deux fois peut parcourir les clés différemment. Chaque fois que la sortie doit être prédictible, rassemblez les clés dans un array, utilisez table.sort sur elles, puis parcourez le tableau trié à la place :
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endDéfi
FacileComptez les objets récupérés avec une map typée.
- Déclarez
type Counts = {[string]: number}. - Écrivez
countItems(items: {string}): Countsqui construit une nouvelle mapCounts, en comptant combien de fois chaque chaîne apparaît (utilisez le motif(counts[item] or 0) + 1). - Créez
local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}et comptez-le. - Affichez une ligne
[name]: [count]par élément distinct, par ordre alphabétique : collectez les clés, appliquez-leurtable.sort, puis affichez.
Résultat attendu :
potion: 3
shield: 1
sword: 2Essayez vous-même
-- Écrivez le code ici
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts en utilisant (counts[item] or 0) + 1
-- 3) compter le tableau loot de la tâche
-- 4) collecter les clés, table.sort les, imprimer les lignes `{name}: {count}`
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Introduction à Luau
1Premiers pas avec Luau
Qu'est-ce que Luau ?Pourquoi utiliser Luau ?Votre premier code LuauVérification de type et modes d'erreurRécapitulatif : Introduction à Luau4Travailler avec les fonctions
Typage des paramètres et valeurs de retourTypage des fonctions anonymesFonctions ne retournant rienParamètres optionnelsValeurs par défaut des paramètresFonctions variadiquesDéfinition des types de fonctionsRécapitulatif : Fonctions typées2Types fondamentaux
Types de base : num, str, boolLe type 'any' : la porte de sortieLe type 'unknown'Types Nil et optionnelsL'inférence de type en actionAnnotations explicites de typeRécapitulatif : Pratique des types fondamentaux5Alias, unions et intersections
Alias de types pour les types primitifsTypes unionsTravailler avec les types unionsTypes littérauxTypes intersectionsCombinaison d'alias de typesRécapitulatif : Combinaisons de types avancées3Tables typées : Tableaux et Maps
Tableaux typésAjout et lecture d'élémentsQu'est-ce qu'un type Map ?Déclaration et accès aux MapsItération sur les tablesTables à formes mixtesTableaux typés multidimensionnelstable.unpack et VarargsRécapitulatif : Tableaux et Maps