Menu
Coddy logo textTech

Index-Signaturen

Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy — Lektion 72 von 73.

Du hast Map-Typen wie {[string]: number} bereits im Tabellen-Kapitel kennengelernt — eine Index-Signatur: jeder string-key wird auf einen number-Wert abgebildet. Sie glänzen, wenn die keys beim Schreiben des Codes noch nicht bekannt sind: Zähler, Einstellungen, Caches, Punktestände — alles, was zur Laufzeit aufgebaut wird.

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- jeder String-Schlüssel ist erlaubt
counts["sword"] = 1
counts["potion"] += 1  -- Werte werden als Zahlen überprüft

Zwei Laufzeit-Fakten sind beim Arbeiten mit Maps wichtig. Erstens: Das Auslesen eines Schlüssels, der nie gesetzt wurde, gibt nil zurück — das klassische Zählmuster behandelt dies mit or, indem es "missing" in 0 umwandelt:

counts[item] = (counts[item] or 0) + 1

Zweitens: pairs() iteriert über die keys einer Map in keiner garantierten Reihenfolge (order) — wenn du dasselbe Programm zweimal ausführst, können die keys in unterschiedlicher Reihenfolge durchlaufen werden. Wann immer die Ausgabe vorhersagbar sein muss, sammle (collect) die keys in einem array, sortiere (sort) sie mit table.sort und iteriere stattdessen über das sortierte array:

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

Aufgabe

Einfach

Zähle Loot-Drops mit einer typisierten Map.

  • Deklariere type Counts = {[string]: number}.
  • Schreibe countItems(items: {string}): Counts, das eine neue Counts-Map erstellt und zählt, wie oft jeder String vorkommt (verwende das Muster (counts[item] or 0) + 1).
  • Erstelle local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"} und zähle es.
  • Gib eine [name]: [count]-Zeile pro eindeutigem Element in alphabetischer Reihenfolge aus: sammle die Schlüssel, wende table.sort auf sie an und gib sie dann aus.

Erwartete Ausgabe:

potion: 3
shield: 1
sword: 2

Probier es selbst

-- Schreibe Code hier
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts mit (counts[item] or 0) + 1
-- 3) zähle das loot-Array aus der Aufgabe
-- 4) sammle Schlüssel, table.sort sie, drucke `{name}: {count}` Zeilen
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Einführung in Luau