Die Inhalte eines Arrays müssen oft geändert werden, wie wenn es erforderlich ist, einen Gegenstand aus dem Inventar eines Spieler:inzu entfernen. Lua hat vordefinierte Funktionen für den Gebrauch mit Tabellen, um dies zu vereinfachen.
Dieser Artikel wird die vordefinierten Funktionen für Tabellen wie hinzufügen und entfernen beschreiben, während er erklärt, wie Sie nach einem Wert suchen.
Um diese Fähigkeiten anzuwenden, erstellen Sie ein Skript, das hilft, das Inventar eines Spieler:inim Spiel zu verwalten.
Werte zu Arrays hinzufügen
Um einem Array einen neuen Wert hinzuzufügen, verwende table.insert(array, valueToInsert). Der zweite Parameter kann beliebiger Wert wie eine String, eine Zahl oder ein ganzes Objekt sein, wie Player oder IntValue.
Um das Prinzip zu üben, erstellen Sie ein Skript, das die Elemente des Spielers in einer Tabelle speichert, und fügen Sie sie dann hinzu. Dieses Beispiel ist nur ein Skript, das. PL: die Skripts, so dass es mit jedem Datei- oder Projekt verwendet werden kann. Der Code wird im Ausgabe-Fenster getestet.
Erstellen Sie ein leeres Array namens playerItems .
playerItems = {}Fügen Sie Inventarartikel dem Array hinzu, indem Sie table.insert() eingeben. In der Klammer schreiben Sie playerItems, die Tabelle, die Sie hinzufügen möchten, und folgen Sie für jeden Artikel durch eine Zeichenfolge. 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. In Ausgabe, erweitern Sie die drei Punkte ..., um die gedruckte Tabelle anzuzeigen.
Werte aus Arrays entfernen
Um einen Wert zu entfernen, wie wenn ein Spieler ein Element oder jemand in einer Liste von aktiven Spielern verlässt eine Erlebnis, verwenden Sie table.remove(). Abhängig von den bereitgestellten Parametern kann die Funktion entweder den letzten Wert einer Tabelle entfernen oder an einem bestimmten Index.
Letzten Wert entfernen
Manchmal muss ein Skript ein bestimmtes Artikelentfernen. Zum Instanzmuss das erste Element in einem Spieler:inInventar entfernt werden, oder das erste Spieler in einer Liste auswählen. Um den letzten Wert in einer Arrayzu entfernen, verwenden Sie table.remove(arrayName). In diesem Anwendungsfall muss der einzige Parallelberechnungsparameter die Tabelle selbst sein.
Verwenden Sie die Matrix von Elementen aus dem vorherigen Beispiel. Dann, um den letzten Wert aus der Tabelle zu entfernen, in diesem Fall "Sleeping Bag" , tippe table.remove(playerItems)
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 Ausgabe-Fenster sollte der letzte Wert, "Sleeping Bag", nicht gedruckt werden.
Entfernen durch Index
Um einen Wert an einem bestimmten Punkt in der Arrayzu entfernen, geben Sie im zweiten Parameter den Index zum Entfernen ein, wie z. B. table.remove(arrayName, 1).
Verwenden Sie die gleiche Tabelle, geben Sie table.remove() ein. Im Parameter geben Sie den Namen der Tabelle und 1 ein, der Wert zum entfernen.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Starten Sie das Projekt. Überprüfen Sie, dass der erste Wert, "Trank" entfernt wurde.
Werte in einem Array suchen
Um bestimmte Werte in Arrays zu finden, wie den Namen eines Gewinner Spieler:in, verwenden Sie die Funktion table.find(). Alternativ können Sie Ihre eigene Suchfunktion mit for Loops und if Anweisungen codieren.
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 das erste Mal stoppt, wenn es einen Matching-Wert findet.
Sobald es den Wert gefunden hat, verwendet die Funktion das return-Schlüsselwort, um den Index des Wertes zurückzugeben. Mit einem Index kannst du ihn aus dem Array entfernen.
Kopiere die Mat阵 namens playerItems unten.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Codieren Sie eine neue Funktion namens findValue() mit zwei Parametern:
whichArray - die Matrix, durch die gesucht werden kann.
itemName - die spezifische Zeichenkette zum Überprüfen.
local function findValue(whichArray, itemName)end
In findValue() , verwenden Sie ein for-Loop, um zu überprüfen, ob ein Wert in der Matrix itemName übereinstimmt. Wenn der Wert übereinstimmt, verwenden Sie das Schlüsselwort return, um den Wert zurückzukehren, der in 1> currentIndex1> gefunden wurde.
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 aufrufen findValue() . Passieren Sie in der Matrix, um zu suchen, und welchen Wert Sie suchen sollen. Run the code to confirm that the expected output is index 2 .
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Sendet den Wert von currentIndex Zurückreturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Einen Wert entfernen
Wenn ein Wert mit der find-Funktion gefunden wurde, kann er entfernt werden. Überprüfen Sie, ob ein Wert mit einem If-Ausdruck gefunden wurde.
Überprüfen Sie, ob ein Wert in valueFound ist; wenn so, entfernen Sie den Wert mit table.remove().
if valueFound thentable.remove(playerItems, valueFound)endDrucke die Matrix mit dem Code unten aus.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endSpielen Sie das Ergebnis des ersten "Bread" -Wertes aus dem Array und überprüfen Sie, dass er entfernt wurde. Versuchen Sie, andere Werte zu entfernen, indem Sie den zweiten findValue() in findValue() ändern.
Beachten Sie, dass, da diese Funktion einmal aufgerufen wurde, nur die erste Instanz von "Bread" entfernt wurde. Der folgende Abschnitt wird die Möglichkeit erörtern, alle Instanzen zu finden und zu entfernen.
Alle Werte eines bestimmten Wertes finden und entfernen
Während der vorherige Code die erste Instanz eines Werte, der gefunden wurde, entfernen konnte, findet dieses Snippet-Code alle Erscheinungen aus einer Array. Zum Beispiel, wenn, sagen wir, ein Spieler alle seine Brot im Spiel-Store verkaufen wollte.
Verwenden Sie ein Array namens playerItems mit mindestens vier Werten und einer Reihe von Duplikaten .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Um den Array zu durchlaufen, erstellen Sie ein for-Loop, das rückwärts durch playerItems geht, beginnend bei #playerItems und endend bei 1, und incrementiert um -1.
for index = #playerItems, 1, -1 doendIn der Loop verwenden Sie ein if-Zeichen, um zu überprüfen, ob der Wert innerhalb von playerItems[index] identisch mit "Bread" ist, und wenn so, entfernen Sie das Artikel.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendVerwenden Sie den Code unten, um eine zweite für Loop hinzuzufügen, die die Arraydruckt.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endFühren Sie das Skript aus und überprüfen Sie, dass alle Werte mit dem Namen "Bread" entfernt wurden.
Zusammenfassung
Werte können aus einem Array entfernt oder hinzugefügt werden, aber achten Sie auf die Verschiebung von Indexen, wenn dies geschieht. Verwenden Sie Loop, um durch eine Tabelle zu wiederholen, um alle Instanzen eines Werte zu entfernen, oder nur die erste Instanz, die gefunden wurde.
Das Schlüsselwort return kann verwendet werden, um einen Loop zu stoppen und Informationen zurückzusenden, wo nötig.
Eine fertige Version des Skripts kann unten verwendet werden.
Das folgende Projekt enthält alle Skripte in diesem Tutorial. Laden Sie hier .
Beachten Sie, dass alle Skripte in ServerScriptService und deaktiviert sind. Um ein Skript, das. PL: die Skriptszu verwenden, in seinen Eigenschaften das Feld Deaktiviert deaktivieren und Studio ausführen.