Mục lục

Bảng (Tables) trong Lua

Giới thiệu

Tables là cấu trúc dữ liệu duy nhất có sẵn trong Lua và cực kỳ linh hoạt. Chúng có thể được sử dụng để biểu diễn mảng, từ điển, bản ghi và nhiều hơn nữa.

Tables cơ bản

Một table trong Lua được tạo bằng dấu ngoặc nhọn {}. Dưới đây là một table đơn giản chứa một số loại trái cây:

fruits = {"apple", "banana", "mango"}

Bạn có thể truy cập các phần tử trong table bằng chỉ số của chúng. Table trong Lua sử dụng chỉ số bắt đầu từ 1.

print(fruits[1]) -- Kết quả: apple  
print(fruits[2]) -- Kết quả: banana  
print(fruits[3]) -- Kết quả: mango

Thêm và xóa phần tử

Để thêm phần tử vào một table, bạn có thể dùng hàm table.insert. Để xóa phần tử, dùng hàm table.remove.

table.insert(fruits, "orange")  
print(fruits[4]) -- Kết quả: orange
table.remove(fruits, 2) -- Xóa "banana"  
print(fruits[2]) -- Kết quả: mango

Tables không có chỉ số

Bạn cũng có thể tạo table mà không dùng chỉ số số học. Những table này thường được gọi là từ điển (dictionary) hoặc bản đồ (map).

person = {
    name = "John",
    age = 30,
    city = "Jakarta"
}

Truy cập các phần tử trong table bằng khóa (key) của chúng:

print(person.name) -- Kết quả: John  
print(person.age)  -- Kết quả: 30  
print(person.city) -- Kết quả: Jakarta

Tables hỗn hợp

Tables có thể chứa cả phần tử có chỉ số và phần tử có tên.

mixedTable = {
    "apple",
    "banana",
    name = "Fruit Basket",
    count = 2
}
print(mixedTable[1])     -- Kết quả: apple  
print(mixedTable[2])     -- Kết quả: banana  
print(mixedTable.name)   -- Kết quả: Fruit Basket  
print(mixedTable.count)  -- Kết quả: 2

Duyệt qua các table

Bạn có thể duyệt qua các phần tử có chỉ số bằng ipairs và duyệt qua tất cả các phần tử (cả có chỉ số và có tên) bằng pairs.

-- Duyệt qua phần tử có chỉ số
for i, fruit in ipairs(fruits) do
    print("Fruit " .. i .. ": " .. fruit)
end
-- Duyệt qua tất cả phần tử
for key, value in pairs(person) do
    print(key .. ": " .. value)
end

Tables lồng nhau

Tables có thể chứa các table khác, cho phép bạn tạo ra các cấu trúc dữ liệu phức tạp.

nestedTable = {
    fruits = {"apple", "banana"},
    vegetables = {"carrot", "lettuce"}
}
print(nestedTable.fruits[1])     -- Kết quả: apple  
print(nestedTable.vegetables[2]) -- Kết quả: lettuce

Các hàm làm việc với table

Lua cung cấp một số hàm tích hợp để thao tác với table:

Ví dụ:

-- Sắp xếp một table
numbers = {5, 2, 9, 1, 5, 6}
table.sort(numbers)
for i, num in ipairs(numbers) do
    print(num)
end
-- Kết quả:
-- 1
-- 2
-- 5
-- 5
-- 6
-- 9
-- Nối các giá trị trong table thành chuỗi
str = table.concat(fruits, ", ")
print(str) -- Kết quả: apple, banana, mango, orange

Kết luận

Tables trong Lua rất linh hoạt và mạnh mẽ, cho phép bạn tạo ra nhiều cấu trúc dữ liệu khác nhau để phù hợp với nhu cầu của mình. Dù bạn cần mảng đơn giản, từ điển hay cấu trúc lồng nhau phức tạp, tables đều có thể đáp ứng được.

Để biết thêm thông tin chi tiết, bạn có thể tham khảo: [Tài liệu Lua chính thức]
(https://www.lua.org/manual/5.4/manual.html#6)

Tài liệu tham khảo