Menu
Coddy logo textTech

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 nombres

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

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

Défi

Facile

Comptez les objets récupérés avec une map typée.

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

Résultat attendu :

potion: 3
shield: 1
sword: 2

Essayez 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}`
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