آرایهها و لیستها در لوا
آرایهها با ایندکس از ۱، آرایههای تو در تو، ماتریس و الگوهای رایج
آرایه در لوا
آرایه در لوا همان جدول با کلیدهای عددی متوالی است — با این تفاوت بزرگ که ایندکس از ۱ شروع میشود:
local fruits = {"سیب", "موز", "پرتقال"}
print(fruits[1]) -- سیب (نه fruits[0]!)
print(fruits[2]) -- موز
print(#fruits) -- 3
-- مقداردهی با ایندکس
local arr = {}
arr[1] = "اول"
arr[2] = "دوم"
اشتباه رایج برنامهنویسان C/Python:
arr[0] در لوا nil است! حلقهها هم باید از ۱ شروع شوند.پیمایش آرایه
local nums = {10, 20, 30, 40, 50}
-- روش ۱: numeric for
for i = 1, #nums do
print(i, nums[i])
end
-- روش ۲: ipairs (تمیزتر)
for i, v in ipairs(nums) do
print(i, v)
end
سوراخهای آرایه (Sparse Arrays)
اگر ایندکسی را nil کنید، آرایه «سوراخ» میشود و # دیگر قابلاعتماد نیست:
local arr = {1, 2, 3, 4, 5}
arr[3] = nil -- سوراخ!
-- # ممکن است 2 یا 5 برگرداند (نامشخص!)
print(#arr)
-- ipairs تا سوراخ میرود
for i, v in ipairs(arr) do
print(i, v) -- فقط 1 و 2
end
برای حذف از وسط آرایه از
table.remove(arr, i) استفاده کنید تا سوراخ ایجاد نشود.آرایههای تو در تو — ماتریس
-- ساخت ماتریس ۳×۳
local matrix = {}
for i = 1, 3 do
matrix[i] = {}
for j = 1, 3 do
matrix[i][j] = i * j
end
end
-- نمایش ماتریس
for i = 1, 3 do
local row = {}
for j = 1, 3 do
table.insert(row, matrix[i][j])
end
print(table.concat(row, "\t"))
end
مثال: جمع عناصر
local function sum(arr)
local total = 0
for _, v in ipairs(arr) do
total = total + v
end
return total
end
print(sum({1, 2, 3, 4, 5})) -- 15
مثال: پیدا کردن بزرگترین
local function maxOf(arr)
if #arr == 0 then return nil end
local max = arr[1]
for i = 2, #arr do
if arr[i] > max then
max = arr[i]
end
end
return max
end
print(maxOf({3, 7, 2, 9, 4})) -- 9
مثال: معکوس کردن آرایه
local function reverse(arr)
local result = {}
for i = #arr, 1, -1 do
table.insert(result, arr[i])
end
return result
end
local reversed = reverse({1, 2, 3, 4})
print(table.concat(reversed, ", ")) -- 4, 3, 2, 1
مثال: حذف تکراریها
local function unique(arr)
local seen = {}
local result = {}
for _, v in ipairs(arr) do
if not seen[v] then
seen[v] = true
table.insert(result, v)
end
end
return result
end
print(table.concat(unique({1, 2, 2, 3, 1, 4}), ", ")) -- 1, 2, 3, 4
این مبحث بخشی از دوره آموزش کامل لوا است.