在Lua表中返回值的索引

9

I have this table in lua:

local values={"a", "b", "c"}

如果一个变量等于表格中的某个条目,有没有一种方法返回该表格的索引?

local onevalue = "a"

如何在不迭代所有值的情况下获取表格中“a”或onevalue的索引?

3个回答

27

没有遍历的方法可以做到那样。

如果你发现自己经常需要这样做,考虑建立一个倒排索引:

local index={}
for k,v in pairs(values) do
   index[v]=k
end
return index["a"]

那真是一个聪明的解决方案。 - user6245072

7

已经接受的答案可行,但还有改进之处:

  • 找到元素后为什么不退出循环?并且为什么要将整个源表复制到一个新的临时表中?
  • 通常这种函数返回具有该值的第一个数组索引,而不是具有该值的任意数组索引。

对于数组:

-- Return the first index with the given value (or nil if not found).
function indexOf(array, value)
    for i, v in ipairs(array) do
        if v == value then
            return i
        end
    end
    return nil
end

print(indexOf({'b', 'a', 'a'}, 'a'))  -- 2

对于哈希表:

-- Return a key with the given value (or nil if not found).  If there are
-- multiple keys with that value, the particular key returned is arbitrary.
function keyOf(tbl, value)
    for k, v in pairs(tbl) do
        if v == value then
            return k
        end
    end
    return nil
end

print(keyOf({ a = 1, b = 2 }, 2))  -- 'b'

这对于大型表格来说非常重要。写得好。 - Amir

0
如果您在Roblox开发中使用Lua,您可以使用table.find方法:
print(table.find({'a', 'b', 'c'}, 'b'))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接