Lua - Bàn

Giới thiệu

Bảng là cấu trúc dữ liệu duy nhất có sẵn trong Lua giúp chúng ta tạo các kiểu khác nhau như mảng và từ điển. Lua sử dụng mảng kết hợp và có thể được lập chỉ mục với không chỉ số mà còn với chuỗi ngoại trừ nil. Bàn không có kích thước cố định và có thể phát triển tùy theo nhu cầu của chúng ta.

Lua sử dụng bảng trong tất cả các biểu diễn bao gồm biểu diễn các gói. Khi chúng ta truy cập một phương thức string.format, điều đó có nghĩa là chúng ta đang truy cập vào hàm định dạng có sẵn trong gói chuỗi.

Trình bày và sử dụng

Các bảng được gọi là đối tượng và chúng không phải là giá trị cũng như biến. Lua sử dụng biểu thức hàm tạo {} để tạo một bảng trống. Cần biết rằng không có mối quan hệ cố định nào giữa một biến chứa tham chiếu của bảng và chính bảng đó.

--sample table initialization
mytable = {}

--simple table value assignment
mytable[1]= "Lua"

--removing reference
mytable = nil

-- lua garbage collection will take care of releasing memory

Khi chúng ta có một cái bàn a với tập hợp các phần tử và nếu chúng tôi gán nó cho b, cả hai abtham khảo cùng một bộ nhớ. Không có bộ nhớ riêng biệt nào được cấp phát riêng cho b. Khi a được đặt thành nil, bảng vẫn có thể truy cập được đối với b. Khi không có tham chiếu đến một bảng, thì bộ sưu tập rác trong Lua sẽ xử lý quá trình dọn dẹp để làm cho các bộ nhớ không tham chiếu này được sử dụng lại lần nữa.

Dưới đây là một ví dụ để giải thích các tính năng được đề cập ở trên của bảng.

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

Khi chúng tôi chạy chương trình trên, chúng tôi sẽ nhận được kết quả sau:

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

Thao tác bảng

Có sẵn các hàm dành cho thao tác trên bảng và chúng được liệt kê trong bảng sau.

Sr.No. Phương pháp & Mục đích
1

table.concat (table [, sep [, i [, j]]])

Nối các chuỗi trong bảng dựa trên các tham số đã cho. Xem ví dụ để biết chi tiết.

2

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

Chèn một giá trị vào bảng ở vị trí đã chỉ định.

3

table.maxn (table)

Trả về chỉ mục số lớn nhất.

4

table.remove (table [, pos])

Xóa giá trị khỏi bảng.

5

table.sort (table [, comp])

Sắp xếp bảng dựa trên đối số so sánh tùy chọn.

Hãy cùng chúng tôi xem một số mẫu của các chức năng trên.

Kết nối bảng

Chúng ta có thể sử dụng hàm concat để ghép hai bảng như hình dưới đây:

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

Khi chúng tôi chạy chương trình trên, chúng tôi sẽ nhận được kết quả sau:

Concatenated string 	bananaorangeapple
Concatenated string 	banana, orange, apple
Concatenated string 	orange, apple

Chèn và Xóa

Việc chèn và loại bỏ các mục trong bảng là phổ biến nhất trong thao tác trên bảng. Nó được giải thích dưới đây.

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

Khi chúng tôi chạy chương trình trên, chúng tôi sẽ nhận được kết quả sau:

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

Bảng sắp xếp

Chúng tôi thường yêu cầu sắp xếp một bảng theo một thứ tự cụ thể. Các hàm sắp xếp sắp xếp các phần tử trong bảng theo thứ tự bảng chữ cái. Một mẫu cho điều này được hiển thị bên dưới.

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

Khi chúng tôi chạy chương trình trên, chúng tôi sẽ nhận được kết quả sau:

1	banana
2	orange
3	apple
4	grapes
sorted table
1	apple
2	banana
3	grapes
4	orange