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üftZwei 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) + 1Zweitens: 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]}`)
endAufgabe
EinfachZähle Loot-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 es. - Gib eine
[name]: [count]-Zeile pro eindeutigem Element in alphabetischer Reihenfolge aus: sammle die Schlüssel, wendetable.sortauf sie an und gib sie dann 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 Schlüssel, table.sort sie, drucke `{name}: {count}` Zeilen
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