جدول‌ها (Tables) در لوا

جدول — تنها ساختار داده لوا: آرایه، دیکشنری، ترکیبی و ارجاع با مرجع

جدول: قلب لوا

لوا فقط یک ساختار داده دارد: جدول (Table)! جدول هم‌زمان می‌تواند آرایه، لیست، دیکشنری، شیء و هر چیز دیگری باشد. این یکی از دلایل سادگی و قدرت لواست.

ساخت جدول

-- جدول خالی
local t = {}

-- به‌عنوان آرایه
local arr = {10, 20, 30}

-- به‌عنوان دیکشنری
local person = {name = "علی", age = 25}

-- ترکیبی!
local mixed = {
1, 2, 3,                    -- بخش آرایه‌ای
title = "لیست",             -- بخش دیکشنری
nested = {a = 1, b = 2},    -- جدول تو در تو
}

دسترسی به عناصر

local person = {name = "علی", age = 25, city = "تهران"}

-- دو روش معادل
print(person.name)      -- علی
print(person["name"])   -- علی

-- کلید رشته‌ای با فاصله یا عدد
local t = {["کلید با فاصله"] = 1, [10] = "ده"}
print(t["کلید با فاصله"])
print(t[10])
ایندکس آرایه در لوا از ۱ شروع می‌شود، نه ۰! arr[1] اولین عنصر است.

افزودن و حذف

local t = {}

-- افزودن
t[1] = "اول"
t.name = "جدول من"
t["کلید"] = "مقدار"

-- حذف (با nil کردن)
t.name = nil   -- کلید name حذف شد

-- افزودن به انتهای آرایه
local arr = {1, 2, 3}
arr[4] = 4         -- روش مستقیم
table.insert(arr, 5)   -- روش استاندارد

جدول‌ها با مرجع کار می‌کنند!

مهم: متغیر جدول، خود جدول نیست — آدرس آن است:

local a = {1, 2, 3}
local b = a         -- b همان جدول است، کپی نیست!

b[1] = 100
print(a[1])         -- 100! چون هر دو یک جدولند

-- کپی واقعی باید دستی انجام شود
local function copy(t)
local new = {}
for k, v in pairs(t) do
new[k] = v
end
return new
end

local c = copy(a)
c[1] = 999
print(a[1])   -- هنوز 100

جدول‌های تو در تو

local company = {
name = "لرنینگ سیتی",
employees = {
{name = "علی", role = "برنامه‌نویس"},
{name = "مریم", role = "طراح"},
},
address = {
city = "تهران",
street = "ولیعصر",
},
}

print(company.name)
print(company.employees[1].name)      -- علی
print(company.address.city)           -- تهران

-- تعداد کارمندان
print(#company.employees)   -- 2

طول جدول با #

local arr = {10, 20, 30}
print(#arr)   -- 3

-- فقط بخش آرایه‌ای را می‌شمارد!
local mixed = {1, 2, 3, name = "تست"}
print(#mixed)   -- 3 (name شمرده نمی‌شود)

جدول به‌عنوان مجموعه (Set)

local visited = {}
visited["صفحه۱"] = true
visited["صفحه۲"] = true

if visited["صفحه۱"] then
print("قبلاً دیده شده!")
end
جدول‌ها همه‌جا در لوا هستند: ماژول‌ها، اشیاء، محیط سراسری (_G) — همه جدول‌اند!

این مبحث بخشی از دوره آموزش کامل لوا است.

ابزارهای مرتبط