English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
La tabella è un tipo di struttura dati di Lua usata per aiutarci a creare diversi tipi di dati, come: array, dizionario, ecc.
La tabella Lua utilizza array associativi, puoi usare qualsiasi tipo di valore come indice dell'array, ma questo valore non può essere nil.
La tabella Lua non ha una dimensione fissa, puoi espanderla in base alle tue esigenze.
Lua risolve anche moduli (module), pacchetti (package) e oggetti (Object) attraverso la tabella. Ad esempio, string.format indica l'uso di "format" per indicizzare la tabella string.
L'espressione costruttiva è usata per creare e inizializzare la tabella. La tabella è una funzionalità potente specifica di Lua. Il costruttore più semplice è {}, usato per creare una tabella vuota. Puoi inizializzare direttamente un array:
-- inizializzazione della tabella mytable = {} -- valore specificato mytable[1] = "Lua" -- rimozione di riferimenti mytable = nil -- la raccolta dei rifiuti Lua rilascia la memoria
Quando assegniamo elementi alla tabella a e poi assegniamo a a b, a e b puntano alla stessa memoria. Se a viene impostato su nil se b può accedere agli elementi della tabella, se non c'è alcuna variabile che punta a a, il meccanismo di raccolta dei rifiuti di Lua pulirà la memoria corrispondente.
Esempi seguenti illustrano la situazione descritta sopra:
-- tabella semplice mytable = {} print("Il tipo della tabella mytable è ", type(mytable)) mytable[1] = "Lua" mytable["wow"] = "prima della modifica" print("l'elemento con l'indice 1 della tabella mytable è ", mytable[1]) print("L'elemento con l'indice wow di mytable è ", mytable["wow"]) -- alternatetable e mytable si riferiscono alla stessa tabella alternatetable = mytable print("L'elemento con l'indice 1 di alternatetable è ", alternatetable[1]) print("L'elemento con l'indice wow di mytable è ", alternatetable["wow"]) alternatetable["wow"] = "modificato" print("L'elemento con l'indice wow di mytable è ", mytable["wow"]) -- Liberare la variabile alternatetable = nil print("alternatetable è ", alternatetable) -- mytable può ancora essere acceduto print("L'elemento con l'indice wow di mytable è ", mytable["wow"]) mytable = nil print("mytable è ", mytable)
Il risultato dell'esecuzione del codice sopra è:
Il tipo di mytable è table L'elemento con l'indice 1 di mytable è Lua L'elemento con l'indice wow di mytable è nil, prima della modifica L'elemento con l'indice 1 di alternatetable è Lua L'elemento con l'indice wow di mytable è nil, prima della modifica L'elemento con l'indice wow di mytable è nil, dopo la modifica alternatetable è nil L'elemento con l'indice wow di mytable è nil, dopo la modifica mytable è nil
Di seguito è elencato i metodi comuni utilizzati per le operazioni sulla tabella:
Numero di sequenza | Metodo & Utilizzo |
---|---|
1 | table.concat (table [, sep [, start [, end]]]): Concat è l'abbreviazione di concatenate (catenare, connettere). La funzione table.concat() elenca tutti gli elementi della parte array della tabella specificata tra le posizioni start e end, separati dal carattere di separazione (sep) specificato. |
2 | table.insert (table, [pos,] value): Inserire un elemento con valore value nella posizione (pos) della parte array della tabella. Il parametro pos è opzionale; per default viene inserito alla fine della parte array. |
3 | table.maxn (table) Specificare il valore chiave più grande tra tutte le chiavi positive della tabella. Se non esiste un elemento con valore chiave positivo, restituisce 0. (Dopo Lua5.2, questo metodo non esiste più; questo documento utilizza una funzione personalizzata per implementarlo) |
4 | table.remove (table [, pos]) 返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。 |
5 | table.sort (table [, comp]) 对给定的table进行升序排序。 |
接下来我们来看下这几个方法的示例。
我们可以使用 concat() 输出一个列表中元素连接成的字符串:
fruits = {"banana","orange","apple"} -- 返回 table 连接后的字符串 print("连接后的字符串 ",table.concat(fruits)) -- 指定连接字符 print("连接后的字符串 ",table.concat(fruits,",")) -- 指定索引来连接 table print("连接后的字符串 ",table.concat(fruits,",",2,3))
Esegui il codice sopra per ottenere il seguente risultato:
连接后的字符串 bananaorangeapple 连接后的字符串 banana, orange, apple 连接后的字符串 orange, apple
以下示例演示了 table 的插入和移除操作:
fruits = {"banana","orange","apple"} -- 在末尾插入 table.insert(fruits,"mango") print("索引为 4 的元素为 ",fruits[4]) -- 在索引为 2 的键处插入 table.insert(fruits,2,"grapes") print("索引为 2 的元素为 ",fruits[2]) print("最后一个元素为 ",fruits[5]) table.remove(fruits) print("移除后最后一个元素为 ",fruits[5])
Esegui il codice sopra per ottenere il seguente risultato:
索引为 4 的元素为 mango 索引为 2 的元素为 grapes 最后一个元素为 mango 移除后最后一个元素为 nil
以下示例演示了 sort() 方法的使用,用于对 Table 进行排序:
fruits = {"banana","orange","apple","grapes"} print("排序前") per k, v in ipairs(fruits) fare print(k,v) fine table.sort(fruits) print("ordinato") per k, v in ipairs(fruits) fare print(k,v) fine
Esegui il codice sopra per ottenere il seguente risultato:
prima dell'ordinamento 1 banana 2 arancia 3 mela 4 uva ordinato 1 mela 2 banana 3 uva 4 arancia
table.maxn non esiste più dopo Lua5.2, abbiamo definito il metodo table_maxn per implementarlo.
Esempio seguente dimostra come ottenere il valore massimo in una table:
funzione table_maxn(t) locale mn=nil; per k, v in pairs(t) fare se(mn==nil) allora mn=v fine se mn < v allora mn = v fine fine ritorna mn fine tbl = {[1] = 2, [2] = 6, [3] = 34, [26] = 5} print("valore massimo tbl:", table_maxn(tbl)) print("lunghezza tbl", #tbl)
Esegui il codice sopra per ottenere il seguente risultato:
valore massimo tbl: 34 lunghezza tbl 3
Attenzione:
quando otteniamo la lunghezza di una table, sia con # che con table.getn, entrambi si fermeranno all'indice di interruzione e non potranno ottenere correttamente la lunghezza della table.
puoi utilizzare i seguenti metodi per sostituirli:
funzione table_leng(t) locale leng=0 per k, v in pairs(t) fare leng=leng+1 fine ritorna leng; fine