Trang chủ
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 […]
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 |
|---|---|
| 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 (bảng)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: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