آرایه‌ها و لیست‌ها در لوا

آرایه‌ها با ایندکس از ۱، آرایه‌های تو در تو، ماتریس و الگوهای رایج

آرایه در لوا

آرایه در لوا همان جدول با کلیدهای عددی متوالی است — با این تفاوت بزرگ که ایندکس از ۱ شروع می‌شود:

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

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

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