我不能让表条目索引。我需要它从表中删除的项。

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

另一个问题是:?为何Lua中没有“过载”到功能table.remove因此可以由关联的索引中删除项目

有帮助吗?

解决方案

t[k]=nil t移除与键k的条目。

有关的第二个问题,回答是,表可以具有各自的元表。

其他提示

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

如果您知道密钥k,然后t[k] = nil将同时删除键,从表中的关联值。然而,这种操作对表中的任何其他键或值没有影响。

table.inserttable.remove功能通过所述一组以1开始的连续整数密钥,其用于按照惯例来实现阵列或列表的操作。为了这个目的,它们在列表中操纵其他值,以保持列表从显影孔。

要找到在其中一些值是发现密钥的一种方法是简单地搜索该表。如果将完成超过一次,那么它可能是一个好主意,建立第二个表反转键/值对,以便查找按值是尽可能快地通过索引查找。

有一个合适的实现将取决于你的假设和需求。一些样品是:

-- return the first integer index holding the value 
function AnIndexOf(t,val)
    for k,v in ipairs(t) do 
        if v == val then return k end
    end
end

-- return any key holding the value 
function AKeyOf(t,val)
    for k,v in pairs(t) do 
        if v == val then return k end
    end
end

-- return all keys holding the value
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

-- invert a table so that each value is the key holding one key to that value 
-- in the original table.
function Invert(t)
    local i={}
    for k,v in pairs(t) do 
        i[v] = k
    end
    return i
end
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top