获取表格条目索引。

我无法获取表格的条目索引。我需要它来从表格中删除项目。

我使用 table.insert 将条目添加到表格中。

另一个问题: 为什么 Lua 没有重载函数 table.remove,以便可以通过关联索引删除项目?

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

点赞
stackoverflow用户107090
stackoverflow用户107090

对于第二个问题,答案是:表可以拥有独立的元表。

t[k]=nil从表t中移除键为k的条目。

2010-01-19 19:59:12
stackoverflow用户68204
stackoverflow用户68204

表实现了键和值之间的无序一对多关系。换句话说,任何特定的键(索引)在表中只能出现一次,但是一个值可以出现多次。

如果你知道键“k”,则“t[k] = nil”将从表中删除键和相关的值。然而,此操作对表中的任何其他键或值都没有影响。

“table.insert”和“table.remove”函数作用于从1开始的一组连续的整数键集合上,这些键通常用于实现数组或列表。为此,它们操纵列表中的其他值,以保持列表不会产生空洞。

找到某个值所在的键的一种方法是简单地搜索表。如果这样做不止一次,那么建立一个第二个表反转键/值对可能是一个不错的主意,以便查找值和查找索引一样快。

合适的实现将取决于您的假设和需求。以下是一些示例:

— 返回包含值的第一个整数索引
function AnIndexOf(t,val)
    for k,v in ipairs(t) do
        if v == val then return k end
    end
end

— 返回包含值的任何一个键
function AKeyOf(t,val)
    for k,v in pairs(t) do
        if v == val then return k end
    end
end

— 返回包含值的所有键
function AllKeysOf(t,val)
    local s={}
    for k,v in pairs(t) do
        if v == val then s[#s+1] = k end
    end
    return s
end

— 反转一个表,使每个值成为原始表中一个键到该值的键。
function Invert(t)
    local i={}
    for k,v in pairs(t) do
        i[v] = k
    end
    return i
end
2010-01-19 23:31:56