Menu
Coddy logo textTech

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 nombres

Deux 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) + 1

Deuxiè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]}`)
end
challenge icon

Défi

Facile

Comptez les éléments récupérés avec une table typée.

  • Déclarez type Counts = {[string]: number}.
  • Écrivez countItems(items: {string}): Counts qui construit une nouvelle table Counts en 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, appliquez table.sort, puis affichez-les.

Sortie attendue :

potion: 3
shield: 1
sword: 2

Essayez 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}`
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Lua en ligne