Lua - Tabel
pengantar
Tabel adalah satu-satunya struktur data yang tersedia di Lua yang membantu kita membuat tipe yang berbeda seperti array dan kamus. Lua menggunakan array asosiatif dan yang dapat diindeks tidak hanya dengan angka tetapi juga dengan string kecuali nil. Meja tidak memiliki ukuran tetap dan dapat tumbuh sesuai kebutuhan kita.
Lua menggunakan tabel dalam semua representasi termasuk representasi paket. Ketika kita mengakses sebuah metode string.format, artinya kita sedang mengakses fungsi format yang tersedia dalam paket string.
Representasi dan Penggunaan
Tabel disebut objek dan bukan nilai maupun variabel. Lua menggunakan ekspresi konstruktor {} untuk membuat tabel kosong. Perlu diketahui bahwa tidak ada hubungan tetap antara variabel yang memiliki referensi tabel dan tabel itu sendiri.
--sample table initialization
mytable = {}
--simple table value assignment
mytable[1]= "Lua"
--removing reference
mytable = nil
-- lua garbage collection will take care of releasing memory
Saat kita punya meja a dengan set elemen dan jika kita menugaskannya b, keduanya a dan bmengacu pada memori yang sama. Tidak ada memori terpisah yang dialokasikan secara terpisah untuk b. Jika a disetel ke nihil, tabel akan tetap dapat diakses oleh b. Jika tidak ada referensi ke tabel, maka pengumpulan sampah di Lua akan menangani proses pembersihan untuk membuat memori yang tidak direferensikan ini dapat digunakan kembali.
Contoh ditunjukkan di bawah untuk menjelaskan fitur tabel yang disebutkan di atas.
-- Simple empty table
mytable = {}
print("Type of mytable is ",type(mytable))
mytable[1]= "Lua"
mytable["wow"] = "Tutorial"
print("mytable Element at index 1 is ", mytable[1])
print("mytable Element at index wow is ", mytable["wow"])
-- alternatetable and mytable refers to same table
alternatetable = mytable
print("alternatetable Element at index 1 is ", alternatetable[1])
print("alternatetable Element at index wow is ", alternatetable["wow"])
alternatetable["wow"] = "I changed it"
print("mytable Element at index wow is ", mytable["wow"])
-- only variable released and and not table
alternatetable = nil
print("alternatetable is ", alternatetable)
-- mytable is still accessible
print("mytable Element at index wow is ", mytable["wow"])
mytable = nil
print("mytable is ", mytable)
Saat kita menjalankan program di atas, kita akan mendapatkan output berikut -
Type of mytable is table
mytable Element at index 1 is Lua
mytable Element at index wow is Tutorial
alternatetable Element at index 1 is Lua
alternatetable Element at index wow is Tutorial
mytable Element at index wow is I changed it
alternatetable is nil
mytable Element at index wow is I changed it
mytable is nil
Manipulasi Tabel
Ada dalam fungsi bawaan untuk manipulasi tabel dan mereka tercantum dalam tabel berikut.
Sr.No. | Metode & Tujuan |
---|---|
1 | table.concat (table [, sep [, i [, j]]]) Menggabungkan string dalam tabel berdasarkan parameter yang diberikan. Lihat contoh untuk detailnya. |
2 | table.insert (table, [pos,] value) Menyisipkan nilai ke dalam tabel pada posisi yang ditentukan. |
3 | table.maxn (table) Menampilkan indeks numerik terbesar. |
4 | table.remove (table [, pos]) Menghapus nilai dari tabel. |
5 | table.sort (table [, comp]) Mengurutkan tabel berdasarkan argumen pembanding opsional. |
Mari kita lihat beberapa contoh fungsi di atas.
Tabel Concatenation
Kita bisa menggunakan fungsi concat untuk menggabungkan dua tabel seperti yang ditunjukkan di bawah ini -
fruits = {"banana","orange","apple"}
-- returns concatenated string of table
print("Concatenated string ",table.concat(fruits))
--concatenate with a character
print("Concatenated string ",table.concat(fruits,", "))
--concatenate fruits based on index
print("Concatenated string ",table.concat(fruits,", ", 2,3))
Saat kita menjalankan program di atas, kita akan mendapatkan output berikut -
Concatenated string bananaorangeapple
Concatenated string banana, orange, apple
Concatenated string orange, apple
Sisipkan dan Hapus
Penyisipan dan penghapusan item dalam tabel paling umum terjadi dalam manipulasi tabel. Dijelaskan di bawah.
fruits = {"banana","orange","apple"}
-- insert a fruit at the end
table.insert(fruits,"mango")
print("Fruit at index 4 is ",fruits[4])
--insert fruit at index 2
table.insert(fruits,2,"grapes")
print("Fruit at index 2 is ",fruits[2])
print("The maximum elements in table is",table.maxn(fruits))
print("The last element is",fruits[5])
table.remove(fruits)
print("The previous last element is",fruits[5])
Saat kita menjalankan program di atas, kita akan mendapatkan output berikut -
Fruit at index 4 is mango
Fruit at index 2 is grapes
The maximum elements in table is 5
The last element is mango
The previous last element is nil
Tabel Sortasi
Kami sering kali perlu mengurutkan tabel dalam urutan tertentu. Fungsi sortir mengurutkan elemen dalam tabel menurut abjad. Contoh untuk ini ditunjukkan di bawah.
fruits = {"banana","orange","apple","grapes"}
for k,v in ipairs(fruits) do
print(k,v)
end
table.sort(fruits)
print("sorted table")
for k,v in ipairs(fruits) do
print(k,v)
end
Saat kita menjalankan program di atas, kita akan mendapatkan output berikut -
1 banana
2 orange
3 apple
4 grapes
sorted table
1 apple
2 banana
3 grapes
4 orange