gpt4 book ai didi

lua - 获取表项索引

转载 作者:行者123 更新时间:2023-12-04 06:22:05 29 4
gpt4 key购买 nike

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

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

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

最佳答案

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

如果您知道键 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

关于lua - 获取表项索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2095669/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com