Index-Signaturen
Teil des Abschnitts Einführung in Luau der Lua-Journey von Coddy. Lektion 72 von 73.
Du bist im Kapitel über Tabellen bereits auf Map-Typen wie {[string]: number} gestoßen: eine Index-Signatur: Jeder String-Schlüssel bildet einen Zahlenwert ab. Sie sind besonders nützlich, wenn die Schlüssel beim Schreiben des Codes noch nicht bekannt sind: Zähler, Einstellungen, Caches, Punktzahlen – alles, was zur Laufzeit aufgebaut wird.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- beliebiger String-Schlüssel ist erlaubt
counts["sword"] = 1
counts["potion"] += 1 -- Werte werden als Zahlen geprüftZwei Fakten zur Laufzeit sind bei der Arbeit mit Maps wichtig. Erstens liefert das Lesen eines Schlüssels, der nie gesetzt wurde, nil: Das klassische Zählmuster behandelt dies mit or und verwandelt „fehlend“ in 0:
counts[item] = (counts[item] or 0) + 1Zweitens durchläuft pairs() die Schlüssel einer Map in keiner garantierten Reihenfolge: Beim zweimaligen Ausführen desselben Programms können die Schlüssel in einer anderen Reihenfolge besucht werden. Wenn die Ausgabe vorhersehbar sein muss, sammelst du die Schlüssel in einem Array, sortierst sie mit table.sort und durchläufst stattdessen 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]}`)
endAufgabe
EinfachZähle Beute-Drops mit einer typisierten Map.
- Deklariere
type Counts = {[string]: number}. - Schreibe
countItems(items: {string}): Counts, das eine neueCounts-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 sie. - Gib für jedes unterschiedliche Element eine Zeile im Format
[name]: [count]in alphabetischer Reihenfolge aus: Sammle die Schlüssel, sortiere sie mittable.sortund gib sie anschließend aus.
Erwartete Ausgabe:
potion: 3
shield: 1
sword: 2Probier 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 keys, table.sort sie, gib `{name}: {count}` Zeilen aus
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
1Erste Schritte mit Luau
Was ist Luau?Warum Luau nutzen?Dein erster Luau-CodeTypprüfung & FehlermodiZusammenfassung: Einführung in Luau4Arbeiten mit Funktionen
Typisierung von Parametern & RückgabewertenTypisierung von anonymen FunktionenFunktionen ohne RückgabewertOptionale ParameterStandard-ParameterwerteVariadische FunktionenDefinieren von FunktionstypenZusammenfassung: Typisierte Funktionen2Grundtypen
Grundlegende Typen: num, str, boolDer Typ 'any': Der AuswegDer Typ 'unknown'Nil- & optionale TypenTypinferenz in der PraxisExplizite TypannotationenZusammenfassung: Praxis zu Grundtypen5Typ-Aliase, Union-Typen und Schnittmengen-Typen
Typ-Aliase für PrimitivenUnion-TypenArbeiten mit Union-TypenLiterale TypenSchnittmengen-Typen (Intersection Types)Kombination von Typ-AliasenZusammenfassung: Fortgeschrittene Typ-Kombinationen8Enums auf die Luau-Art
Das Enum-Pattern in LuauNumerische Enums mit TablesString-Enums als UnionsVerwendung von Literal Union EnumsKonstante Tables einfrierenZusammenfassung: Enums auf die Luau-Art11Fortgeschrittene Themen
Typzusicherungen (Type Assertions)Type Guards mit typeofDer Typ neverNil-Sicherheit im Strict ModeIndex-SignaturenZusammenfassung: Feineinstellung von Typen3Typisierte Tabellen: Arrays & Maps
Typisierte ArraysHinzufügen und Lesen von ElementenWas ist ein Map-Typ?Deklarieren und Zugreifen auf MapsIterieren von TabellenGemischt-strukturierte TabellenMehrdimensionale typisierte Arraystable.unpack und VarargsZusammenfassung: Arrays und MapsÜbe selbstständig: Online-Lua-Compiler