Bài 13 : Bảng tables trong Lua

Bài 13 : Bảng tables trong Lua

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 […]

Learn more »

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 các mảng kết hợp và có thể được lập chỉ mục với không chỉ các số mà còn với các 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 các 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 tôi truy cập một phương thức string.format, điều đó có nghĩa là chúng tôi đ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 một 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 bảng a với tập hợp các phần tử và nếu chúng ta gán nó cho b , cả a và b đều tham chiếu đến cùng một vùng 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 sẽ vẫn có thể truy cập được đối với b. Khi không có tham chiếu nào đế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 một 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 ta chạy chương trình trên, chúng ta 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
1table.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.
2table.insert (table, [pos,] value)Chèn một giá trị vào bảng ở vị trí đã chỉ định.
3table.maxn (bảng)Trả về chỉ mục số lớn nhất.
4table.remove (table [, pos])Xóa giá trị khỏi bảng.
5table.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:Bản thử trực tiếp

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 ta chạy chương trình trên, chúng ta 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.Bản thử trực tiếp

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 phân loại

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ị dưới đây.Bản thử trực tiếp

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 ta chạy chương trình trên, chúng ta 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


Lượt xem : 211

Integrations
Users

Share Profile

Anyone at KeenThemes can view
Anyone with link can edit

Give Award

Anyone at KeenThemes can view
Anyone with link can edit

Report User

Let us know why you’re reporing this person
Don't worry, your report is completely anonymous; the person you're
reporting will not be informed that you've submitted it