Dictionaries sind Tabellen, die Namen oder "Schlüssel**" mit einem Wert anstelle eines Indexes zuordnen.
Beispiel:
Lua-Wörterbuchsyntax
local pet = {Name = "Bobbie",Type = "Dog",}
Verwenden Sie Wörterbücher, wenn Sie Werte etikettieren müssen, nicht nur sie in einer Matrix aufzulisten - üben Sie mit Wörterbüchern in diesem Tutorial, indem Sie Werte mit einem Spieler:inin Zusammenhang bringen.
Syntax des Dictionaries
Wie Arrays, werden Dictionaries mit kurzen Klammern zugewiesen, {} . Schlüsselwertepaare werden in separaten Zeilen mit einem Komma gespeichert. Schlüssel und Werte können alle eingebenvon Daten, einschließlich Strings, Zahlen und Variablen, sein.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Um Teile oder andere instanzierte Objekte als Schlüssel zu beziehen, verwenden Sie Klammern.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Ein Wörterbuch erstellen
Eine tägliche Verwendung von Diktionen ist die Organisation von Spieler- oder Charakter-Informationen. Diese Schritte erkunden, wie die Informationen eines theoretischen Feindescharakters gespeichert und aufgerufen werden können.
In einem neuen Skript, das. PL: die Skriptserstellen Sie ein Wörterbuch namens enemy .
local enemy = {}Der erste Schlüssel im Wörterbuch wird den Namen des Feindes mit einer Variable namens Name verfolgen.
local enemy = {Name}Weisen Sie einem Schlüsseleinen Namen zu, gefolgt von einem Komma.
local enemy = {Name = "Spike",}Fügen Sie ein zweites Key-Value-Paar hinzu, wie viel Gesundheit der Feind haben soll. Denken Sie daran, dass Schlüssel immer den gleichen eingebenverwenden sollten, aber Werte nicht.
local enemy = {Name = "Spike",Health = 1000,}
Verwendung von Wörterbüchern
Es gibt zwei Möglichkeiten, auf Wörterbienen-Werte zuzugreifen: tableName["keyName"] -- Beachten Sie die Zitaten tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Welchen Stil verwenden, hängt normalerweise von dem Zweck der Tabelle ab. Für Tabellen, die eine Sammlung von Werten wie einer Liste von Spielern in einem Server enthalten, verwenden Coder in der Regel tableName ["keyName"). Für eine Datenbank, die ein Objekt beschreibt, verwenden Coder wahrscheinlich tableName.keyName.
Ändern eines Wörterbucheintrags
Die Änderung des Wertes eines Schlüssels ist wie jede andere Variable; verwende den gleichen = Operator.
Unter der enemy Tabelle, setzen Sie den Namen des Feindes auf etwas anderes.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Teste das Ausgabe-Fenster und überprüfe es.
Bereits vorhandene Variablen als Schlüssel
Diktionäre können mit vorhandenen Variablen in anderen Teilen eines Skript, das. PL: die Skriptsinteragieren. Das folgende Coding-Beispiel verwendet eine Variable, um den Namen eines Spieler:inals Schlüssel hinzuzufügen, wenn sie dem Erlebnis beitreten und dann seinen Punktewert auf 0 festlegen.
In ServerScriptService erstellen Sie ein neues Skript namens PlayerPoints. Im Skript, das. PL: die Skriptserhalten Sie den Players-Service und erstellen Sie ein leeres Wörterbuch namens playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Code eine lokale Funktion für die Festlegung von Spielerpunkten mit einem Parameter für eine neue Spieler变수. Verbinden Sie die Funktion mit dem Players.PlayerAdded -Ereignis.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)In der Funktion fügen Sie eine Variable hinzu, um die Name des Spieler:inzu erhalten, eine Eigenschaft in jedem Spieler -Objekt und eine druckenden Anweisung für das Testen.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endFügen Sie den Namen in das playerPoints-Wörterbuch als Schlüssel ein und setzen Sie den Wert, die Punkte des Spieler:in, auf 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endVerwenden Sie name, um den Namen des Spielers und der SpielerPunkte[name] zu drucken, um den Wert des Schlüssels zu drucken, der der Variable entspricht.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endLaufen Sie das Projekt und schauen Sie in den Ausgabe-Editor.
Fertiges Skript, das. PL: die Skripts
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)
Optionale Herausforderungen
Hier sind einige Herausforderungen, die sich für die Verwendung von Diktionen auf verschiedene Weise beziehen. Sehen Sie, ob Sie den Code für diese aufbauen können.
- Erstellen Sie ein Fangteil, das einem Spieler:inSchaden über Zeit verursacht. Einmal, wenn ein Spieler den Fang berührt, schaden Sie ihn, warten Sie, dann erlauben Sie ihm, wieder beschädigt zu werden.
- Erstellen Sie eine Funktion, die prüft, welcher der beiden Spieler die meisten Punkte hat, indem er auf ein Wörterbuch zugreift.
- Erstellen Sie einen Cipher, ein System, in dem Sie ein Wort durch ein anderes ersetzen, um einen "geheimen" Codeszu erstellen, z. B. Wie das Buchstab "A" mit "G" getauscht werden kann, oder wie das Wort Apple mit dem Wort Orange getauscht werden kann.
Diktionare und Paare()
pairs() ist eine Funktion, die oft verwendet wird, um durch Diktionen zu wiederholen. Ein Beispiel ist unten zu sehen.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() kann verwendet werden, um mit einem Wörterbuch-Element-Schlüssel, Wert oder beides zu arbeiten. Im For-Loop unten ist die erste Variable der Schlüssel. Die zweite Variable ist der Wert. Das Wörterbuch, mit dem Sie arbeiten möchten, wird in pairs() übergeben.
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Wenn es ausgeführt wird, druckt der Code gefolgte Profile:
You have:43 Gold Bricks3 Carrots2 Torches
Zusammenfassung
Dictionaries sind Tabellen, die Schlüsselwertpaare verwenden, anstatt auf gespeicherte Werte zuzugreifen. Dictionaries und Arrays starten ähnlich, indem sie mit Kommas getrennte Einreichungen verwenden.
Alle Schlüssel innerhalb eines Dictionaries sollten dieselben eingebenverwenden, aber die Werte können Datentypen mischen, ohne Problem.
Die Art und Weise, wie ein Wörterbuch zugänglich gemacht wird, kann den Zweck eines Wörterbuches übermitteln. Ein Wörterbuch von feindlichen Eigenschaften wird wahrscheinlich mit dem Punktbetreiber zugänglich gemacht, während eine Liste von Namen wahrscheinlich tableName[KeyName] verwendet.
Wenn Sie Klammern verwenden, achten Sie auf; Schlüsselnamen, die innerhalb der Tabelle erstellt wurden, müssen als Zeichen behandelt werden: tableName["keyName"] . Wenn Sie jedoch auf Objekte wie Teile verweisen, sind die Klammern nicht erforderlich: tableName[keyName] .
Viele Skripte müssen durch Dictionaries oder Arrays gehen, aber Sie wissen möglicherweise nicht immer den Anfang und das Ende dieser Datenstrukturen. Zum Beispiel kann ein Wörterbuch von Spielern geändert werden, oder Spieler haben ein Array-Inventar von verschiedenen Größen.
In diesen Situationen können Sie pairs() und ipairs() in einem for -Loop verwenden, um jedes Element ohne bekannte Start- und Endpunkte durchzugehen. Sie können auch generelle Iter durch das 1> in1>-Kennwort über die Elemente hinweglaufen, ohne die Notwendigkeit für 4> p