Wörterbücher sind Tabellen, die Namen oder Schlüssel mit einem Wert anstelle eines Indexes verknüpfen.
Beispiel:
local pet = {
Name = "Bobbie",
Type = "Hund",
}Verwenden Sie Wörterbücher, wenn Sie Werte kennzeichnen müssen, und sie nicht nur in der Reihenfolge auflisten möchten, wie es ein Array tut. Ü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.GreenPart
local redPart = workspace.RedPart
local partList = {
[greenPart] = true,
[redPart] = false,
}
print(partList[redPart])Erstellen eines Wörterbuchs
Eine alltägliche Verwendung von Wörterbüchern besteht darin, Spieler- oder Charakterinformationen zu organisieren. Diese Schritte zeigen, wie die Informationen eines theoretischen feindlichen Charakters 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 verfolgt den Namen des Feindes mit einer Variablen namens Name.
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 für die Gesundheit des Feindes hinzu. Denken Sie daran, dass Schlüssel immer denselben Datentyp verwenden sollten, die 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!")Welchen Stil Sie verwenden, hängt normalerweise vom Zweck der Tabelle ab. Für Tabellen, die eine Sammlung von Werten wie eine Liste von Spielern auf einem Server enthalten, verwenden Programmierer normalerweise tableName["keyName"]. Für ein Wörterbuch, das ein Objekt beschreibt, verwenden Programmierer eher tableName.keyName.
Ändern eines Wörterbuchwerts
Das Ändern eines Wertes eines Schlüssels ist dasselbe wie bei jeder anderen Variablen; verwenden Sie den Gleichheitsoperator =.
Setzen Sie unter 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)Testen Sie das Spiel und überprüfen Sie das Ausgabefenster.
Vorhandene Variablen als Schlüssel
Wörterbücher können mit bereits vorhandenen Variablen interagieren, die in anderen Teilen eines Skripts deklariert sind. Das folgende Codierungsbeispiel verwendet eine Variable, um den Namen eines Spielers als Schlüssel hinzuzufügen, wenn er dem Spiel 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-Service 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 Ereignis Players.PlayerAdded.
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 Druckanweisung 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.
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
Im Folgenden finden Sie einige Herausforderungen, die sich auf die Verwendung von Wörterbüchern auf verschiedene Weise beziehen. Sehen Sie, ob Sie den Code dafür erstellen können.
- Erstellen Sie ein Fallstrickteil, das einem Spieler im Laufe der Zeit Schaden zufügt. Sobald ein Spieler den Fallstrick berührt, fügen Sie ihm Schaden zu, warten Sie, und erlauben Sie ihm dann, erneut Schaden zu nehmen.
- Erstellen Sie eine Funktion, die überprüft, welcher von zwei Spielern die meisten Punkte hat, indem sie auf ein Wörterbuch zugreift.
- Erstellen Sie einen Code, ein System, das einen String gegen einen anderen austauscht, um einen "geheimen" Code zu erstellen. Zum Beispiel kann der Buchstabe "A" mit "G" oder das Wort "Apfel" mit "Orange" ausgetauscht werden.
Wörterbücher und pairs()
pairs() ist eine Funktion, die häufig 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) do
print(key .. " ist " .. value)
endpairs() kann verwendet werden, um mit dem Schlüssel, dem Wert oder beidem eines Wörterbuchelements zu arbeiten. In der folgenden 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,
Fackeln = 2,
}
print("Sie haben:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
endWenn der Code ausgeführt wird, wird Folgendes ausgegeben:
Sie haben:
43 Goldene Ziegel
3 Möhren
2 FackelnZusammenfassung
Wörterbücher sind Tabellen, die Schlüssel-Wert-Paare anstelle von indizierten Werten verwenden. Wörterbücher und Arrays beginnen ähnlich, indem sie geschweifte Klammern einer Variablen zuweisen. Halten Sie die Einträge mit Kommas getrennt.
Alle Schlüssel innerhalb eines Wörterbuchs sollten denselben Datentyp verwenden, die Werte können jedoch ohne Probleme gemischt werden.
Die Art und Weise, wie auf ein Wörterbuch zugegriffen wird, kann seinen Zweck vermitteln. Ein Wörterbuch von Feind-Eigenschaften wird wahrscheinlich mit dem Punktoperator zugegriffen, während eine Liste von Namen wahrscheinlich tableName[keyName] verwenden wird.
Seien Sie vorsichtig, wenn Sie Klammern verwenden; Schlüsselnamen, die innerhalb der Tabelle erstellt wurden, müssen als Strings behandelt werden: tableName["keyName"]. Wenn Sie jedoch auf Objekte wie Teile verweisen, sind die Anführungszeichen nicht erforderlich: tableName[keyName].
Viele Skripte müssen durch Wörterbücher oder Arrays gehen, aber Sie wissen möglicherweise nicht immer, wo der Anfang und das Ende dieser Datenstrukturen sind. Zum Beispiel kann ein Wörterbuch von Spielern sich ändern, 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 zu durchlaufen. Sie können auch eine allgemeine Iteration mit dem Schlüsselwort in verwenden, um durch Elemente zu schleifen, ohne pairs() oder ipairs() verwenden zu müssen.