获取表条目索引

mnn*_*mnn 3 lua insert lua-table

我无法获得表项索引.我需要它从表中删除一个项目.

我用来table.insert向表添加条目.

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

RBe*_*eig 7

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

如果您知道密钥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
Run Code Online (Sandbox Code Playgroud)