Lua Uso di base


Esempio

L'utilizzo della tabella di base include l'accesso e l'assegnazione di elementi di tabella, l'aggiunta di contenuto di tabella e la rimozione del contenuto della tabella. Questi esempi presumono che tu sappia come creare tabelle.

Accesso agli elementi

Data la seguente tabella,

local example_table = {"Nausea", "Heartburn", "Indigestion", "Upset Stomach",
                       "Diarrhea", cure = "Pepto Bismol"}

Si può indicizzare la parte sequenziale della tabella usando la sintassi dell'indice, l'argomento della sintassi dell'indice è la chiave della coppia chiave-valore desiderata. Come spiegato nel tutorial di creazione, la maggior parte della sintassi delle dichiarazioni è zucchero sintattico per la dichiarazione delle coppie chiave-valore. Gli elementi inclusi sequenzialmente, come i primi cinque valori in example_table , usano valori interi crescenti come chiavi; la sintassi del record usa il nome del campo come una stringa.

print(example_table[2])        --> Heartburn
print(example_table["cure"])   --> Pepto Bismol

Per le chiavi di stringa c'è lo zucchero di sintassi per mettere in parallelo la sintassi stile record per le chiavi stringa nella creazione della tabella. Le due righe seguenti sono equivalenti.

print(example_table.cure)      --> Pepto Bismol
print(example_table["cure"])   --> Pepto Bismol

Puoi accedere alle tabelle usando le chiavi che non hai mai usato prima, non è un errore come in altre lingue. In questo modo restituisce il valore predefinito nil .

Assegnazione di elementi

È possibile modificare elementi di tabella esistenti assegnandoli a una tabella utilizzando la sintassi dell'indice. Inoltre, la sintassi di indicizzazione in stile record è disponibile anche per l'impostazione dei valori

example_table.cure = "Lots of water, the toilet, and time"
print(example_table.cure)    --> Lots of water, the toilet, and time

example_table[2] = "Constipation"
print(example_table[2])      --> Constipation

Puoi anche aggiungere nuovi elementi a una tabella esistente usando il compito.

example_table.copyright_holder = "Procter & Gamble"
example_table[100] = "Emergency source of water"

Nota speciale: alcune stringhe non sono supportate con la sintassi del record. Vedere la sezione commenti per i dettagli.

Rimozione di elementi

Come affermato in precedenza, il valore predefinito per una chiave senza valore assegnato è nil . Rimuovere un elemento da una tabella è semplice come reimpostare il valore di una chiave sul valore predefinito.

example_table[100] = "Face Mask"

Gli elementi sono ora indistinguibili da un elemento non impostato.

Lunghezza della tabella

Le tabelle sono semplicemente array associativi (vedi osservazioni), ma quando si usano chiavi intere contigue a partire da 1 la tabella si dice abbia una sequenza .

La ricerca della lunghezza della parte di sequenza di una tabella viene eseguita utilizzando # :

local example_table = {'a', 'l', 'p', 'h', 'a', 'b', 'e', 't'}
print(#example_table)    --> 8

È possibile utilizzare l'operazione di lunghezza per aggiungere facilmente elementi a una tabella di sequenze.

example_table[#example_table+1] = 'a'
print(#example_table)    --> 9

Nell'esempio precedente, il valore precedente di #example_table è 8 , l'aggiunta 1 ti dà la successiva chiave intera valida nella sequenza, 9 , quindi ... example_table[9] = 'a' . Questo funziona per qualsiasi lunghezza del tavolo.

Nota speciale: l' utilizzo di chiavi intere non contigue e a partire da 1 interrompe la sequenza trasformando la tabella in una tabella sparsa . In questo caso il risultato dell'operazione di lunghezza non è definito. Vedi la sezione commenti.

Utilizzo delle funzioni della libreria di tabella per aggiungere / rimuovere elementi

Un altro modo per aggiungere elementi a una tabella è la funzione table.insert() . La funzione di inserimento funziona solo sulle tabelle di sequenza. Esistono due modi per chiamare la funzione. Il primo esempio mostra il primo utilizzo, in cui si specifica l'indice per inserire l'elemento (il secondo argomento). Ciò spinge tutti gli elementi dall'indice dato a #table su una posizione. Il secondo esempio mostra l'altro utilizzo di table.insert() , in cui l'indice non è specificato e il valore dato viene aggiunto alla fine della tabella (indice #table + 1 ).

local t = {"a", "b", "d", "e"}
table.insert(t, 3, "c")        --> t = {"a", "b", "c", "d", "e"}

t = {"a", "b", "c", "d"}
table.insert(t, "e")           --> t = {"a", "b", "c", "d", "e"}

Per table.insert() parallelo per la rimozione di elementi è table.remove() . Allo stesso modo ha due semantiche di chiamata: una per rimuovere elementi in una determinata posizione e un'altra per rimuovere dalla fine della sequenza. Quando si rimuove dal centro di una sequenza, tutti gli elementi seguenti vengono spostati di un indice.

local t = {"a", "b", "c", "d", "e"}
local r = table.remove(t, 3)       --> t = {"a", "b", "d", "e"}, r = "c"

t = {"a", "b", "c", "d", "e"}
r = table.remove(t)                --> t = {"a", "b", "c", "d"}, r = "e"

Queste due funzioni mutano la tabella data. Come si potrebbe essere in grado di dire il secondo metodo di chiamata table.insert() e table.remove() fornisce semantica dello stack alle tabelle. Facendo leva su questo, puoi scrivere il codice come nell'esempio qui sotto.

function shuffle(t)
    for i = 0, #t-1 do
        table.insert(t, table.remove(t, math.random(#t-i)))
    end
end

Implementa la Fisher-Yates Shuffle, forse in modo inefficiente. Usa table.insert() per aggiungere l'elemento estratto a caso alla fine della stessa tabella e table.remove() per estrarre in modo casuale un elemento dalla parte rimanente della tabella non mescolata.