Der Inhalt eines Arrays muss oft geändert werden, z. B. wenn ein Element aus dem Inventar eines Spielers entfernt werden muss. Luau bietet eingebaute Funktionen zur Verwendung mit Tabellen, um dies zu erleichtern.
Dieser Artikel beschreibt vorgefertigte Funktionen für Tabellen wie Hinzufügen und Entfernen und erklärt, wie man nach einem Wert sucht.
Um diese Fähigkeiten anzuwenden, erstellen Sie ein Skript, das hilft, das Inventar eines Spielers zu verwalten.

Werte zu Arrays hinzufügen
Um einen neuen Wert zu einem Array hinzuzufügen, verwenden Sie table.insert(array, valueToInsert). Der zweite Parameter kann jeder Wert sein, z. B. ein String, eine Zahl oder ein ganzes Objekt, wie Player oder IntValue.
Zur Übung erstellen Sie ein Skript, das die Artikel eines Spielers in einer Tabelle speichert und dann hinzufügt. Da dieses Beispiel nur ein Skript ist, kann es mit jeder Datei oder jedem Projekt verwendet werden. Der Code wird im Ausgabefenster getestet.
Erstellen Sie ein leeres Array mit dem Namen playerItems.
playerItems = {}Fügen Sie der Array-Artikel zum Inventar hinzu, indem Sie table.insert() eingeben. Geben Sie in den Klammern playerItems, die Tabelle, zu der hinzugefügt werden soll, gefolgt von einem String für jeden Artikel ein. Fügen Sie mindestens drei Werte hinzu.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Führen Sie das Projekt aus. Erweitern Sie in der Ausgabe die drei Punkte ..., um die gedruckte Tabelle zu sehen.
Werte aus Arrays entfernen
Um einen Wert zu entfernen, z. B. wenn ein Spieler einen Artikel verwendet oder jemand in einer Liste aktiver Spieler eine Erfahrung verlässt, verwenden Sie table.remove(). Abhängig von den angegebenen Parametern kann die Funktion entweder den letzten Wert einer Tabelle oder an einem bestimmten Index entfernen.
Den letzten Wert entfernen
Manchmal muss ein Skript ein bestimmtes Element entfernen. Beispielsweise das Entfernen des ersten Elements im Inventar eines Spielers oder das Auswählen des ersten Spielers in einer Liste. Um den letzten Wert in einem Array zu entfernen, verwenden Sie table.remove(arrayName). In diesem Anwendungsfall ist das einzige benötigte Parameter die Tabelle selbst.
Verwenden Sie das Array von Artikeln aus dem vorherigen Beispiel. Um dann den letzten Wert aus der Tabelle zu entfernen, in diesem Fall "Sleeping Bag", geben Sie table.remove(playerItems) ein.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")table.remove(playerItems)print(playerItems)Führen Sie das Projekt aus. Im Ausgabefenster sollte der letzte Wert, "Sleeping Bag", nicht angezeigt werden.
Entfernen nach Index
Um einen Wert an einem bestimmten Punkt im Array zu entfernen, geben Sie im zweiten Parameter den zu entfernenden Index ein, z. B. table.remove(arrayName, 1).
Verwenden Sie dieselbe Tabelle, geben Sie table.remove() ein. Geben Sie in den Parametern den Namen der Tabelle und 1, den zu entfernenden Wert, ein.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")table.remove(playerItems, 1)Führen Sie das Projekt aus. Überprüfen Sie, ob der erste Wert, "Potion", entfernt wurde.
Nach Werten in einem Array suchen
Um bestimmte Werte in Arrays zu finden, wie den Namen eines gewinnenden Spielers, verwenden Sie die Funktion table.find(). Alternativ können Sie Ihre eigene Suchfunktion mithilfe von for-Schleifen und if-Anweisungen programmieren.
Einen einzelnen Wert finden und zurückgeben
Um einen Wert in einem Array zu finden, erstellen Sie eine Funktion namens findValue(), die durch ein Array geht und beim ersten Mal stoppt, dass es einen übereinstimmenden Wert findet.
Sobald es den Wert gefunden hat, verwendet die Funktion das Schlüsselwort return, um den Index dieses Wertes zurückzugeben. Mit einem Index können Sie ihn aus dem Array entfernen.
Kopieren Sie das Array mit dem Namen playerItems unten.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Programmieren Sie eine neue Funktion namens findValue() mit zwei Parametern:
whichArray - das Array, das durchsucht werden soll.
itemName - der spezifische String, nach dem gesucht werden soll.
local function findValue(whichArray, itemName)end
Verwenden Sie in findValue() eine for-Schleife, um zu überprüfen, ob ein Wert im Array mit itemName übereinstimmt. Wenn der Wert übereinstimmt, verwenden Sie das Schlüsselwort return, um den gefundenen Wert im currentIndex zurückzugeben.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendTesten Sie die Suchfunktion, indem Sie eine Variable namens valueFound erstellen und findValue() aufrufen. Übergeben Sie das Array, das durchsucht werden soll, und welchen Wert es suchen soll. Führen Sie den Code aus, um zu bestätigen, dass die erwartete Ausgabe der Index 2 ist.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then-- Gibt den Wert von currentIndex zurückreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("Der Wert befindet sich an Index " .. valueFound)
Einen Wert entfernen
Wenn ein Wert mit der Suchfunktion gefunden wurde, kann er entfernt werden. Überprüfen Sie, ob ein Wert in valueFound vorhanden ist; wenn ja, entfernen Sie den Wert mit table.remove().
if valueFound thentable.remove(playerItems, valueFound)end
Geben Sie das Array mit dem folgenden Code aus.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endTesten Sie das Spiel und überprüfen Sie, ob der erste "Bread"-Wert aus dem Array entfernt wurde. Versuchen Sie, andere Werte zu entfernen, indem Sie den zweiten Parameter in findValue() ändern.
Beachten Sie, dass, da diese Funktion einmal aufgerufen wurde, nur die erste Instanz von "Bread" entfernt wurde. Der folgende Abschnitt behandelt, wie man alle Instanzen finden und entfernen kann.
Finden und Entfernen aller spezifischen Werte
Während der vorherige Code nur die erste Instanz eines gefundenen Wertes entfernen konnte, wird dieser Code-Schnipsel alle Vorkommen aus einem Array finden und entfernen. Wenn ein Spieler zum Beispiel all sein Brot in einem In-Game-Geschäft verkaufen wollte.
Verwenden Sie ein Array namens playerItems mit mindestens vier Werten und einer Menge Duplikate.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Um durch das Array zu gehen, erstellen Sie eine for-Schleife, die rückwärts durch playerItems geht, beginnend bei #playerItems, endend bei 1 und mit -1 inkrementierend.
for index = #playerItems, 1, -1 doendVerwenden Sie in der Schleife eine if-Anweisung, um zu überprüfen, ob der Wert in playerItems[index] gleich "Bread" ist, und entfernen Sie in diesem Fall das Element.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendVerwenden Sie den folgenden Code, um eine zweite for-Schleife hinzuzufügen, die das Array druckt.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endFühren Sie das Skript aus und überprüfen Sie, ob alle Werte mit dem Namen "Bread" entfernt wurden.
Zusammenfassung
Werte können aus einem Array entfernt oder hinzugefügt werden, aber seien Sie vorsichtig, da sich die Indizes dabei verschieben. Verwenden Sie Schleifen, um durch eine Tabelle zu iterieren, um alle Instanzen eines Wertes zu entfernen oder nur die zuerst gefundene Instanz.
Das Schlüsselwort return kann verwendet werden, um eine Schleife zu stoppen und Informationen dorthin zurückzusenden, wo sie benötigt werden.
Eine vollständige Version des Skripts kann unten referenziert werden.
Das folgende Projekt enthält alle Skripte aus diesem Tutorial. Hier herunterladen.
Beachten Sie, dass sich alle Skripte in ServerScriptService befinden und deaktiviert sind. Um ein Skript zu verwenden, deaktivieren Sie im Eigenschaftenfeld das Kontrollkästchen "Deaktiviert" und führen Sie Studio aus.