题
我不能让表条目索引。我需要它从表中删除的项。
我用table.insert
将条目添加到表中。
另一个问题是:?为何Lua中没有“过载”到功能table.remove因此可以由关联的索引中删除项目
解决方案
这t[k]=nil
t
移除与键k
的条目。
有关的第二个问题,回答是,表可以具有各自的元表。
其他提示
表实现无序一个键和值之间的多对多关系。换句话说,任何特定的键(索引)只能在表中出现一次,但是一个值可以出现多次。
如果您知道密钥k
,然后t[k] = nil
将同时删除键,从表中的关联值。然而,这种操作对表中的任何其他键或值没有影响。
在table.insert
和table.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
不隶属于 StackOverflow