Jadual Lua (jadual)


jadual ialah struktur data dalam Lua yang membantu kami mencipta jenis data yang berbeza, seperti nombor, kamus, dsb.

Jadual Lua menggunakan tatasusunan bersekutu Anda boleh menggunakan sebarang jenis nilai sebagai indeks tatasusunan, tetapi nilai ini tidak boleh kosong.

Meja Lua tidak mempunyai saiz tetap dan anda boleh mengembangkannya mengikut keperluan anda.

Lua juga menggunakan jadual untuk menyelesaikan modul, pakej dan objek. Contohnya, string.format bermaksud menggunakan "format" untuk mengindeks rentetan jadual.


Pembinaan jadual (jadual)

Pembina ialah ungkapan yang mencipta dan memulakan jadual. Meja adalah sesuatu yang unik untuk Lua. Pembina yang paling mudah ialah {}, yang mencipta jadual kosong. Anda boleh memulakan tatasusunan secara terus:

-- 初始化表
mytable = {}

-- 指定值
mytable[1]= "Lua"

-- 移除引用
mytable = nil
-- lua 垃圾回收会释放内存

Apabila kami menetapkan elemen untuk jadual a, dan kemudian menetapkan a kepada b, kedua-dua a dan b menunjuk ke memori yang sama. jika a ditetapkan kepada sifar , maka b juga boleh mengakses elemen jadual. Jika tiada pembolehubah tertentu yang menunjuk ke a, mekanisme kutipan sampah Lua akan membersihkan memori yang sepadan.

Contoh berikut menunjukkan penerangan di atas:

-- 简单的 table
mytable = {}
print("mytable 的类型是 ",type(mytable))

mytable[1]= "Lua"
mytable["wow"] = "修改前"
print("mytable 索引为 1 的元素是 ", mytable[1])
print("mytable 索引为 wow 的元素是 ", mytable["wow"])

-- alternatetable和mytable的是指同一个 table
alternatetable = mytable

print("alternatetable 索引为 1 的元素是 ", alternatetable[1])
print("mytable 索引为 wow 的元素是 ", alternatetable["wow"])

alternatetable["wow"] = "修改后"

print("mytable 索引为 wow 的元素是 ", mytable["wow"])

-- 释放变量
alternatetable = nil
print("alternatetable 是 ", alternatetable)

-- mytable 仍然可以访问
print("mytable 索引为 wow 的元素是 ", mytable["wow"])

mytable = nil
print("mytable 是 ", mytable)

Hasil pelaksanaan kod di atas ialah:

mytable 的类型是 	table
mytable 索引为 1 的元素是 	Lua
mytable 索引为 wow 的元素是 	修改前
alternatetable 索引为 1 的元素是 	Lua
mytable 索引为 wow 的元素是 	修改前
mytable 索引为 wow 的元素是 	修改后
alternatetable 是 	nil
mytable 索引为 wow 的元素是 	修改后
mytable 是 	nil

Kendalian jadual

disenaraikan di bawah Kaedah yang biasa digunakan untuk operasi Jadual:

< td>table.maxn (jadual)<🎜>Menentukan nilai kunci terbesar antara semua nilai kunci positif dalam jadual jika tiada unsur dengan nilai kunci positif , 0 dikembalikan. (Kaedah ini tidak lagi wujud selepas Lua5.2, artikel ini menggunakan fungsi tersuai untuk melaksanakannya)<🎜> < td>4
Nombor Siri Kaedah & Tujuan
1table.concat (jadual [, sep [, mula [, tamat]]]):
序号方法 & 用途
1table.concat (table [, sep [, start [, end]]]):

concat是concatenate(连锁, 连接)的缩写. table.concat()函数列出参数中指定table的数组部分从start位置到end位置的所有元素, 元素间以指定的分隔符(sep)隔开。

2table.insert (table, [pos,] value):

在table的数组部分指定位置(pos)插入值为value的一个元素. pos参数可选, 默认为数组部分末尾.

3table.maxn (table)

指定table中所有正数key值中最大的key值. 如果不存在key值为正数的元素, 则返回0。(Lua5.2之后该方法已经不存在了,本文使用了自定义函数实现)

4table.remove (table [, pos])

返回table数组部分位于pos位置的元素. 其后的元素会被前移. pos参数可选, 默认为table长度, 即从最后一个元素删起。

5table.sort (table [, comp])

对给定的table进行升序排序。

concat ialah singkatan daripada concatenate (rantai, sambungan Fungsi table.concat() menyenaraikan semua elemen dari kedudukan mula ke kedudukan akhir bahagian tatasusunan jadual yang ditentukan dalam parameter, dan unsur-unsurnya ialah. dipisahkan oleh pemisah yang ditentukan (sep). <🎜>
2table.insert (jadual, nilai [pos,]):<🎜>dalam jadual Bahagian tatasusunan menentukan kedudukan (pos) untuk memasukkan elemen yang nilainya ialah nilai Parameter pos adalah pilihan dan lalai pada penghujung bahagian tatasusunan.<🎜>
3
table.remove (jadual [, pos])<🎜>Mengembalikan elemen pada kedudukan pos dalam bahagian susunan jadual Elemen seterusnya akan dialihkan ke hadapan. pos Parameter adalah pilihan dan lalai kepada panjang jadual, yang dipadamkan daripada elemen terakhir. <🎜>
5table.sort (table [, comp])<🎜>Untuk jadual yang diberikan Sort dalam susunan menaik. <🎜>

Seterusnya mari kita lihat contoh kaedah ini.

Sambungan jadual

Kita boleh menggunakan kaedah concat() untuk menyambung dua jadual:

fruits = {"banana","orange","apple"}
-- 返回 table 连接后的字符串
print("连接后的字符串 ",table.concat(fruits))

-- 指定连接字符
print("连接后的字符串 ",table.concat(fruits,", "))

-- 指定索引来连接 table
print("连接后的字符串 ",table.concat(fruits,", ", 2,3))

Hasil keluaran untuk melaksanakan kod di atas ialah:

连接后的字符串 	bananaorangeapple
连接后的字符串 	banana, orange, apple
连接后的字符串 	orange, apple

Sisipkan dan Alih Keluar

Contoh berikut menunjukkan operasi memasukkan dan mengalih keluar jadual:

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])

Hasil output melaksanakan kod di atas ialah:

索引为 4 的元素为 	mango
索引为 2 的元素为 	grapes
最后一个元素为 	mango
移除后最后一个元素为 	nil

Isih jadual

di bawah Contoh menunjukkan penggunaan kaedah sort() untuk mengisih Jadual:

fruits = {"banana","orange","apple","grapes"}
print("排序前")
for k,v in ipairs(fruits) do
	print(k,v)
end

table.sort(fruits)
print("排序后")
for k,v in ipairs(fruits) do
	print(k,v)
end

Hasil output untuk melaksanakan kod di atas ialah:

排序前
1	banana
2	orange
3	apple
4	grapes
排序后
1	apple
2	banana
3	grapes
4	orange

Nilai maksimum jadual

table.maxn Kaedah ini tidak lagi wujud selepas Lua5.2, dan kami mentakrifkan kaedah table_maxn untuk melaksanakannya.

Contoh berikut menunjukkan cara untuk mendapatkan nilai maksimum dalam jadual:

function table_maxn(t)
    local mn = 0
    for k, v in pairs(t) do
        if mn < k then
            mn = k
        end
    end
    return mn
end
tbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"}
print("tbl 长度 ", #tbl)
print("tbl 最大值 ", table_maxn(tbl))

Hasil keluaran untuk melaksanakan kod di atas ialah:

tbl 长度 	3
tbl 最大值 	26