在多个Lua列表中搜索项目

我现在正在编写一个脚本,遇到了一个难题,我无法确定如何检查某个值是否在Lua的任何选定表中。

以下是问题的示例脚本。

players = {213, 644}
helpers = {632, 965}

-- 我应该如何检查数字(例如632)是否在这两个表中的任何一个中?

原文链接 https://stackoverflow.com/questions/71207096

点赞
stackoverflow用户2858170
stackoverflow用户2858170

检查一个值是否在列表中,你需要遍历该列表,并将每个元素与你要查找的值进行比较。

如果你想对多个列表进行此操作,则需要对每个列表都执行此操作。

local lists = {players, helpers}
local foundIn = {}

for _, list in ipairs(lists) do
  for _, v in pairs(list) do
    if v == 632 then
      table.insert(foundIn, list)
      break
    end
  end
end
2022-02-21 13:27:14
stackoverflow用户107090
stackoverflow用户107090

如果表格是固定的或者不频繁更改,请尝试以下代码:

players = {213, 644}
helpers = {632, 965}
present = {}

for k,v in pairs(players) do present[v]=true end
for k,v in pairs(helpers) do present[v]=true end

print(present[632])
print(present[633])

如果你需要知道物品的位置,可以这样做:

for k,v in pairs(players) do present[v]="players" end
for k,v in pairs(helpers) do present[v]="helpers" end

print(present[632])
print(present[644])
2022-02-21 15:38:28
stackoverflow用户14777448
stackoverflow用户14777448

使用下面的简单表格找到 _v 的值:

local players = {213, 644}
local helpers = {632, 965}

local function find(t, _v)
    for i, v in pairs(t) do
        local type1 = type(v)
        if type1 == 'table' then
            local value = { find(v, _v) }
            if #value ~= 0 then
                table.insert(value, 2, i)
                return unpack(value)
            end
        elseif i == _v or v == _v then
            return i, v
        end
    end
end

-- 示例:
print(find(players, 632) and '在表格 players 中找到') -- nil
print(find(helpers, 632) and '在表格 helpers 中找到') -- '在表格 helpers 中找到'
2022-02-21 19:26:06