متدهای جدول در لوا
توابع کتابخانه table: insert، remove، concat، sort و unpack
کتابخانه table
لوا توابع کار با جدولها را در کتابخانه table جمع کرده است:
table.insert — درج
local arr = {1, 2, 3}
-- درج در انتها
table.insert(arr, 4) -- {1, 2, 3, 4}
-- درج در موقعیت مشخص (بقیه جابهجا میشوند)
table.insert(arr, 1, 0) -- {0, 1, 2, 3, 4}
print(table.concat(arr, ", ")) -- 0, 1, 2, 3, 4
table.remove — حذف
local arr = {"الف", "ب", "ج", "د"}
-- حذف از انتها (و برگرداندن مقدار)
local last = table.remove(arr)
print(last) -- د
-- حذف از موقعیت مشخص
local first = table.remove(arr, 1)
print(first) -- الف
print(table.concat(arr, ",")) -- ب,ج
table.concat — الحاق
local words = {"لوا", "زبان", "عالی"}
print(table.concat(words, " ")) -- لوا زبان عالی
print(table.concat(words, "-", 1, 2)) -- لوا-زبان (فقط ۱ تا ۲)
-- اعداد هم کار میکنند
print(table.concat({1, 2, 3}, ", ")) -- 1, 2, 3
table.sort — مرتبسازی
local nums = {5, 2, 8, 1, 9}
-- مرتبسازی پیشفرض (صعودی)
table.sort(nums)
print(table.concat(nums, ", ")) -- 1, 2, 5, 8, 9
-- مرتبسازی نزولی با تابع مقایسه
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", ")) -- 9, 8, 5, 2, 1
-- مرتبسازی جدول اشیاء
local people = {
{name = "علی", age = 30},
{name = "مریم", age = 25},
{name = "رضا", age = 35},
}
table.sort(people, function(a, b) return a.age < b.age end)
for _, p in ipairs(people) do
print(p.name, p.age)
end
table.sort ناپایدار است — ترتیب عناصر برابر ممکن است عوض شود. اگر پایداری مهم است، کلید ثانویه اضافه کنید.table.unpack — پخش جدول
local args = {3, 7, 1}
print(math.max(table.unpack(args))) -- 7
-- معادل: math.max(3, 7, 1)
مثال عملی: صف (Queue)
local queue = {}
-- افزودن به صف
local function push(q, value)
table.insert(q, value)
end
-- برداشتن از صف
local function pop(q)
return table.remove(q, 1)
end
push(queue, "اول")
push(queue, "دوم")
push(queue, "سوم")
print(pop(queue)) -- اول
print(pop(queue)) -- دوم
print(#queue) -- 1
مثال عملی: پشته (Stack)
local stack = {}
-- push و pop هر دو از انتها
table.insert(stack, "الف")
table.insert(stack, "ب")
table.insert(stack, "ج")
print(table.remove(stack)) -- ج (آخرین وارد، اولین خارج)
print(table.remove(stack)) -- ب
جدول خلاصه
| تابع | کار |
|---|---|
table.insert(t, v) | درج در انتها |
table.insert(t, i, v) | درج در موقعیت i |
table.remove(t) | حذف از انتها |
table.remove(t, i) | حذف از موقعیت i |
table.concat(t, sep) | الحاق عناصر |
table.sort(t, cmp) | مرتبسازی |
table.unpack(t) | تبدیل به آرگومانها |
این مبحث بخشی از دوره آموزش کامل لوا است.