在LUA表中查找值

我有三个lua表g1、g2、g3,我想要快速有效地查找一个数字(ID)在哪个表中

这是我到目前为止的代码,看起来效率非常低。

g1 = {
    37863,
    78372,
    ...
    ...
}
g2 = {
    19599,
    84651,
    ...
    ...
}
g3 = {
    37462,
    42843,
    ...
    ...
}
for i = 1, 170000 do
    if (g1[i] == ID) then
        --数字在G1表中找到
        break
    elseif (g2[i] == ID) then
        --数字在G2表中找到
        break
    elseif (g3[i] == ID) then
        --数字在G3表中找到
        break
    end
end

我能想到的是,我可以重构表,而不是把数字放在g表后面,直接把它放进表里,像这样:

g = {
    [37863] = 3,
    [78372] = 2,
    [18788] = 1,
}
if (g[ID] == 1) then
 --数字在G1表中找到
elseif (g[ID] == 2) then
 --数字在G2表中找到
elseif (g[ID] == 3) then
 --数字在G3表中找到
end

你认为哪种方法最有效?

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

点赞
stackoverflow用户1442917
stackoverflow用户1442917

应该很容易在你的表格上进行测试,这也是你本应该做的,但在一般情况下,第二个选项会更快,尤其是在大表格进行随机访问时。如果你确实需要始终遍历整个列表并将其分成三个桶,那么第一个选项可能更快,这就是为什么需要在你具体的使用情况下测试它的原因。

2022-02-23 16:48:49
stackoverflow用户14777448
stackoverflow用户14777448

如果您想收集特定的值,您可以简单地迭代要搜索的表,我可以给您一个函数来解释chunks

local function find(table, value)
    for key, _value in pairs(table) do
        if type(_value) == 'table' then
            local f = { find(_value, value) }
            if #f ~= 0 then
                table.insert(f, 2, key); return unpack(f)
            end
        elseif _value == value or key == value then
            return key, _value
        end
    end
end

首先,创建函数并迭代它。扫描主table可能有的所有子表,如果找到值:value,则返回获取该值的路径,否则不返回任何内容。

或对于朋友们:如果该函数返回结果,则该值在其中或在一些子表中。

我希望本结果对您有用,祝您拥有美好的一天!

2022-02-24 01:25:40