Signatures d'index
Fait partie de la section Introduction à Luau du Journey Lua de Coddy. Leçon 72 sur 73.
Tu as rencontré les types map comme {[string]: number} dans le chapitre consacré aux tables : une signature d’index : toute clé de type string correspond à une valeur numérique. Ils sont particulièrement utiles lorsque les clés ne sont pas connues au moment où tu écris le code : compteurs, paramètres, caches, scores — tout ce qui est construit lors 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 liés à l’exécution sont importants lorsque tu travailles avec des maps. Premièrement, la lecture d’une clé qui n’a jamais été définie renvoie nil : le schéma classique de comptage gère cela avec or, en transformant « manquante » en 0 :
counts[item] = (counts[item] or 0) + 1Deuxièmement, pairs() parcourt les clés d’une map dans un ordre non garanti : exécuter deux fois le même programme peut parcourir les clés différemment. Lorsque la sortie doit être prévisible, rassemble les clés dans un tableau, applique table.sort sur celui-ci, puis parcours le tableau trié :
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 éléments récupérés avec une table typée.
- Déclarez
type Counts = {[string]: number}. - Écrivez
countItems(items: {string}): Countsqui construit une nouvelle tableCountsen comptant combien de fois chaque chaîne apparaît (utilisez le modèle(counts[item] or 0) + 1). - Créez
local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}et comptez ses éléments. - Affichez une ligne
[name]: [count]par élément distinct, dans l’ordre alphabétique : rassemblez les clés, appliqueztable.sort, puis affichez-les.
Sortie attendue :
potion: 3
shield: 1
sword: 2Essayez vous-même
-- Écrire 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 MapsEntraînez-vous par vous-même : Compilateur Lua en ligne