I contenuti di un vettoredovranno essere cambiati spesso, come quando è necessario rimuovere un oggetto dall'Inventario, reportoriodi un Giocatore. Lua ha funzioni pre-costruite da utilizzare con le tabelle per rendere questo più facile.
Questo articolo tratterà le funzioni pre-costruite per tabelle come aggiungere e rimuovere mentre descrive come cercare un valore.
Per applicare queste abilità, creerai uno script che aiuta a gestire l'inventario di un Giocatorein un Gioco.
Aggiungere valori alle matrici
Per aggiungere un nuovo valore a un' vettore, use table.insert(array, valueToInsert) . Il secondo parametro può essere qualsiasi valore come una Stringa, un numero o un oggetto intero, come Player o IntValue .
Per praticare, creerai uno script che memorizza gli elementi del giocatore in una tabella e poi li aggiungi. Poiché questo esempio è solo uno script, può essere utilizzato con qualsiasi file o progetto. Il test del codice avverrà utilizzando la finestra di uscita.
Crea un' array vuota chiamata playerItems .
playerItems = {}Aggiungi oggetti dell'inventario all' array facendo clic su table.insert() . In parentesi, digita playerItems , la tabella da aggiungere, seguita da una stringa per ciascun Articolo. Inserisci almeno tre valori.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Esegui il progetto. InOutput, espandi i tre punti ... per visualizzare la tabella stampata.
Rimuovere i valori dagli array
Per rimuovere un valore, come se un giocatore usò un oggetto o qualcuno in una lista di giocatori attivi lasciò un'esperienza, usa table.remove() . A seconda dei parametri forniti, la funzione può rimuovere l'ultimo valore di una tabella, o in un indice specifico.
Rimozione dell'ultimo valore
A volte uno script deve rimuovere un Articolospecifico dallo script. Ad esempio, rimuovendo il primo oggetto nell'Inventario, reportoriodi un Giocatore, o scegliendo il primo giocatore in una lista. Per rimuovere l'ultimo valore in un vettore, usa table.remove(arrayName) . In questo caso d'uso, l'unico parametro richiesto è la tabella stessa.
Usa l' array di oggetti dall'esempio precedente. Quindi, per rimuovere l'ultimo valore dalla tabella, in questo caso "Sleeping Bag" , digita table.remove(playerItems)
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)Esegui il progetto. Nella finestra di output, l'ultimo valore, "Sleeping Bag", non dovrebbe essere stampato.
Rimozione per l'indice
Per rimuovere un valore a un punto specifico nell' vettore, inserisci nel secondo parametro l'indice da Rimuovere, come table.remove(arrayName, 1) .
Usando la stessa tabella, scrivi table.remove(). Nel parametro, inserisci il nome della tabella e 1, il valore da Rimuovere.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Esegui il progetto. Controlla che il primo valore, "Pozione" sia stato rimosso.
Cercare valori in un array
Per trovare valori specifici negli array, come il nome di un Giocatorevincitore, usa la funzione table.find(). In alternativa, puoi codificare la tua funzione di ricerca usando for loop e if dichiarazioni.
Trovare e restituire un singolo valore
Per trovare un valore in un vettore, crea una funzione chiamata findValue() che passa attraverso un array e interrompe la prima volta che trova un valore corrispondente.
Una volta che ha trovato il valore, la funzione userà il return keyword per restituire l'indice di quel valore. Con un index, puoi rimuoverlo dall' vettore.
Copia l' array chiamato playerItems sotto.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Codice una nuova funzione chiamata findValue() con due parametri:
whichArray - l' array da cui cercare.
itemName - la stringa specifica per controllare.
local function findValue(whichArray, itemName)end
In findValue() , usa un for loop per controllare se qualsiasi valore nell' array corrisponde a itemName . Se il valore corrisponde, usa il parametro return per restituire il valore trovato in 1> currentIndex1> .
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendProva la funzione di ricerca creando una variabile chiamata valueFound e chiamando findValue() . Passa nell' array per Cercare, e quale valore dovrebbe cercare. Esegui il codice per confermare che l'output richiesto è l'indice 2.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Restituisce il valore dell'indice correntereturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
Rimuovere un valore
Se un valore è stato trovato utilizzando la funzione find, può essere rimosso. Controlla se un valore è stato trovato con una dichiarazione if.
Controlla se un valore è all'interno di valueFound ; se sì, rimuovi il valore usando table.remove() .
if valueFound thentable.remove(playerItems, valueFound)endStampa l' array utilizzando il codice qui sotto.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endProvalo e assicurati che il primo valore "Bread" abbia été rimosso dall' vettore. Prova a rimuovere altri valori cambiando il secondo parametro in findValue() .
Nota che poiché questa funzione è stata chiamata una volta, solo la prima istanza di "Bread" è stata rimossa. La sezione seguente tratterà come trovare e rimuovere tutte le istanze.
Trovare e rimuovere tutti i valori specifici
Mentre il codice precedente potrebbe rimuovere solo la prima istanza di un valore trovato, questo frammento di codice troverà e rimuoverà tutte le occorrenze da un vettore. Ad esempio, se, diciamo, un giocatore voleva vendere tutto il loro pane in un Negozioin gioco.
Usa un array chiamato playerItems con almeno quattro valori e un set di duplicati .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Per passare attraverso l' vettore, crea un for loop che va all'indietro attraverso playerItems , iniziando da #playerItems e finendo a 1, e incrementando di -1.
for index = #playerItems, 1, -1 doendIn the loop, use an if statement to check if the value inside playerItems[index] is equal to "Bread" , and if so, remove the Articolo.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendUsa il codice seguente per aggiungere un secondo per la stampa dell' vettore.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endEsegui lo script e controlla che tutti i valori chiamati "Bread" siano stati rimossi.
Panoramica
I valori possono essere rimossi o aggiunti a un vettore, ma tieni presente che gli indici possono spostare l'indice quando lo fai. Usa i loop per itере attraverso una tabella per rimuovere tutte le istanze di un valore, o solo la prima istanza trovata.
Il tasto return può essere utilizzato per interrompere un loop e inviare informazioni dove necessario.
Una versione finita dello script può essere riferita qui sotto.
Il seguente progetto include tutti gli script in questo Tutoriale. Scarica qui .
Nota che tutti gli script sono in ServerScriptService e disabilitati . Per utilizzare uno script, nella sua proprietà, deseleziona il campo Disabilitato e esegui Studio.