首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 更多程式設計知識

Lua 判斷陣列 (Table) 是否包含指定值

     編輯:更多程式設計知識

Lua Table 既可作陣列也可作字典,檢查包含關係需根據結構選擇遍歷方式。本文提供兩種常見函數:陣列序列搜尋與字典鍵值搜尋。

1. 陣列序列搜尋 (ipairs)

適用於連續整數鍵 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

2. 字典/物件搜尋 (pairs)

適用於非連續鍵或巢狀結構,例:檢查物件欄位 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 遍歷所有鍵。
  • LuaJIT 下 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 程式設計基本功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved