Wörterbücher sind Tabellen, die Namen oder Schlüssel mit einem Wert anstelle eines Index verknüpfen.
Beispiel:
Luau Wörterbuch-Syntaxlocal pet = {Name = "Bobbie",Type = "Hund",}
Verwenden Sie Wörterbücher, wenn Sie Werte kennzeichnen müssen, anstatt sie wie in einem Array der Reihe nach aufzulisten. Üben Sie die Verwendung von Wörterbüchern in diesem Tutorial, indem Sie Werte manipulieren, die mit einem Spieler verknüpft sind.
Wörterbuch-Syntax
Wie Arrays werden Wörterbücher mit geschweiften Klammern {} einer Variablen zugewiesen. Schlüssel-Wert-Paare werden in separaten Zeilen gespeichert, gefolgt von einem Komma. Schlüssel und Werte können jeden Datentyp haben, einschließlich Strings, Zahlen und Variablennamen.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Um Teile oder andere instanzierte Objekte als Schlüssel zu referenzieren, verwenden Sie Klammern.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Erstellen eines Wörterbuchs
Eine alltägliche Verwendung von Wörterbüchern ist die Organisation von Spieler- oder Charakterinformationen. Diese Schritte zeigen, wie die Informationen eines theoretischen Feindcharakters gespeichert und abgerufen werden können.
Erstellen Sie in einem neuen Skript ein Wörterbuch mit dem Namen enemy.
local enemy = {}Der erste Schlüssel im Wörterbuch wird den Namen des Feindes mit einer Variablen namens Name verfolgen.
local enemy = {Name}Weisen Sie dem Schlüssel einen Feindnamen zu, gefolgt von einem Komma.
local enemy = {Name = "Spike",}Fügen Sie ein zweites Schlüssel-Wert-Paar hinzu, um festzulegen, wie viel Gesundheit der Feind haben sollte. Denken Sie daran, dass Schlüssel immer denselben Datentyp verwenden sollten, Werte jedoch nicht.
local enemy = {Name = "Spike",Health = 1000,}
Verwenden von Wörterbuchwerten
Es gibt zwei Möglichkeiten, auf Wörterbuchwerte zuzugreifen:
- tableName["keyName"] (wichtig: beachten Sie die Anführungszeichen)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("Der Bösewicht " .. enemy["Name"] .. " nähert sich!")print("Der Bösewicht " .. enemy.Name .. " nähert sich!")
Welche Stil verwendet wird, hängt normalerweise vom Zweck der Tabelle ab. Für Tabellen, die eine Sammlung von Werten wie eine Liste von Spielern auf einem Server halten, verwenden die Programmierer normalerweise tableName["keyName"]. Für ein Wörterbuch, das dazu verwendet wird, ein Objekt zu beschreiben, verwenden die Programmierer eher tableName.keyName.
Ändern eines Wörterbuchwerts
Das Ändern des Wertes eines Schlüssels ist dasselbe wie bei jeder anderen Variablen; verwenden Sie den Gleichheitsoperator =.
Setzen Sie unterhalb der enemy-Tabelle den Namen des Feindes auf etwas anderes.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("Der Name des Feindes ist " .. enemy.Name)Spielen Sie das Spiel und überprüfen Sie das Ausgabefenster.
Vorhandene Variablen als Schlüssel
Wörterbücher können mit vorbestehenden Variablen interagieren, die in anderen Teilen eines Skripts deklariert sind. Das folgende Programmierbeispiel verwendet eine Variable, um den Namen eines Spielers als Schlüssel hinzuzufügen, wenn er der Erfahrung beitritt, und setzt dann seinen Punktwert auf 0.
Erstellen Sie in ServerScriptService ein neues Skript mit dem Namen PlayerPoints. Holen Sie sich im Skript den Players-Dienst und erstellen Sie ein leeres Wörterbuch mit dem Namen playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Codieren Sie eine lokale Funktion zum Setzen der Spielerpunkte mit einem Parameter für eine neue Spieler-Variable. Verbinden Sie die Funktion mit dem Players.PlayerAdded-Ereignis.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)Fügen Sie in der Funktion eine Variable hinzu, um den Name des Spielers zu erhalten, eine Eigenschaft in jedem Player-Objekt, und eine Ausgabefunktion zum Testen.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("Hallo " .. name)endFügen Sie name in das playerPoints-Wörterbuch als Schlüssel ein und setzen Sie den Wert, die Punkte des Spielers, auf 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("Hallo " .. name)playerPoints[name] = 0endVerwenden Sie name, um den Namen des Spielers auszugeben, und playerPoints[name], um den Wert des Schlüssels, der der Variablen entspricht, auszugeben.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("Hallo " .. name)playerPoints[name] = 0print(name .. " hat " .. playerPoints[name] .. " Punkte.")endFühren Sie das Projekt aus und beobachten Sie die Ausgabe.
Vollständiges Skript
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("Hallo " .. name)
playerPoints[name] = 0
print(name .. " hat " .. playerPoints[name] .. " Punkte.")
end
Players.PlayerAdded:Connect(setPoints)
Optionale Herausforderungen
Nachfolgend einige Herausforderungen, die auf verschiedene Weisen zur Verwendung von Wörterbüchern anwendbar sind. Überprüfen Sie, ob Sie den Code dafür erstellen können.
- Erstellen Sie ein Fallen-Teil, das einem Spieler im Laufe der Zeit Schaden zufügt. Sobald ein Spieler die Falle berührt, fügen Sie ihm Schaden zu, warten Sie und ermöglichen Sie dann, dass er erneut Schaden erleidet.
- Erstellen Sie eine Funktion, die überprüft, welcher von zwei Spielern die meisten Punkte hat, indem sie auf ein Wörterbuch zugreift.
- Erstellen Sie eine Chiffre, ein System, um einen String gegen einen anderen auszutauschen und einen „geheimen“ Code zu erstellen. Zum Beispiel kann der Buchstabe "A" gegen "G" oder das Wort "Apfel" gegen "Orange" ausgetauscht werden.
Wörterbücher und pairs()
pairs() ist eine Funktion, die oft verwendet wird, um durch Wörterbücher zu iterieren. Ein Beispiel ist unten zu sehen.
local myDictionary = {["Blauer Spieler"] = "Ana",["Goldener Spieler"] = "Binh",["Roter Spieler"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " ist " .. value)end
pairs() kann verwendet werden, um mit dem Schlüssel, dem Wert oder beiden eines Wörterbuch-Elements zu arbeiten. In der nachfolgenden for-Schleife ist die erste Variable der Schlüssel. Die zweite Variable ist der Wert. Das Wörterbuch, mit dem Sie arbeiten möchten, wird an pairs() übergeben.
local inventory = {["Goldene Ziegel"] = 43,Möhren = 3,Laternen = 2,}print("Sie haben:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Bei der Ausführung wird der folgende Code ausgegeben:
Sie haben:43 Goldene Ziegel3 Möhren2 Laternen
Zusammenfassung
Wörterbücher sind Tabellen, die Schlüssel-Wert-Paare anstelle von indizierten Werten verwenden. Wörterbücher und Arrays beginnen ähnlich, indem geschweifte Klammern einer Variablen zugewiesen werden. Halten Sie Einträge mit Kommas getrennt.
Alle Schlüssel innerhalb eines Wörterbuchs sollten denselben Datentyp verwenden, aber die Werte können ohne Probleme verschiedene Datentypen mischen.
Die Art und Weise, wie auf ein Wörterbuch zugegriffen wird, kann seinen Zweck verdeutlichen. Ein Wörterbuch der Feindeigenschaften wird wahrscheinlich mit dem Punktoperator aufgerufen, während eine Liste von Namen wahrscheinlich tableName[keyName] verwenden wird.
Achten Sie darauf, wenn Sie Klammern verwenden; Schlüsselnamen, die innerhalb der Tabelle erstellt werden, müssen als Strings behandelt werden: tableName["keyName"]. Wenn Sie jedoch Objekte wie Teile referenzieren, sind die Anführungszeichen nicht notwendig: tableName[keyName].
Viele Skripte müssen durch Wörterbücher oder Arrays iterieren, aber Sie wissen möglicherweise nicht immer, wo der Anfang und das Ende dieser Datenstrukturen sind. Beispielsweise kann ein Wörterbuch von Spielern wechselhaft sein, oder Spieler können ein Array-Inventar unterschiedlicher Größen haben.
In diesen Situationen können Sie pairs() und ipairs() in einer for-Schleife verwenden, um jedes Element ohne bekannte Start- und Endpunkte durchzugehen. Sie können auch eine allgemeine Iteration durch das Schlüsselwort in verwenden, um durch Elemente zu iterieren, ohne pairs() oder ipairs() zu benötigen.