Lua Table 既可作陣列也可作字典,檢查包含關係需根據結構選擇遍歷方式。本文提供兩種常見函數:陣列序列搜尋與字典鍵值搜尋。
適用於連續整數鍵 1..n 的表:
function IsInTable(value, tbl)
for _, v in ipairs(tbl) do
if v == value then return true end
end
return false
end
-- 使用
local arr = {10, 20, 30}
print(IsInTable(20, arr)) -- true
print(IsInTable(40, arr)) -- false
適用於非連續鍵或巢狀結構,例:檢查物件欄位 tableName 是否等於目標值:
function in_array(target, list)
if not list then return false end
for _, obj in pairs(list) do
if obj.tableName == target then return true end
end
return false
end
-- 使用
local list = {
{tableName = "users"},
{tableName = "orders"}
}
print(in_array("users", list)) -- true
{[value]=true} 實現 O(1) 查找。ipairs 遇到 nil 停止,pairs 遍歷所有鍵。ipairs 極快,但仍建議避免熱路徑線性搜尋。
function table.contains(tbl, value, key)
if key then
for _, v in pairs(tbl) do
if v[key] == value then return true end
end
else
for _, v in ipairs(tbl) do
if v == value then return true end
end
end
return false
end
根據資料結構選擇正確遍歷方式是 Lua 程式設計基本功。