Lua从表中删除项(SDK)

Lua从表中删除项(SDK),lua,coronasdk,Lua,Coronasdk,几个小时来一直在努力解决这个问题,尽管进行了大量的搜索,但还是一无所获,所以如果有人能帮上忙,那就太好了 我的问题是我有一个这样添加的对象表 enemies[enemy_id] = enemy 现在,当地图末尾发生冲突时,我想把敌人从桌子上移除。我已经试着通过 enemies[enemy_id] = nil 但当它到达最后一个敌人时,由于某种原因,桌子已经空了。假设一个表中有3个敌人,我打印表中的计数。第一个被删除,它显示2左,第二个被删除,它显示0左。没有道理 那么,如何从表中删除项呢?我

几个小时来一直在努力解决这个问题,尽管进行了大量的搜索,但还是一无所获,所以如果有人能帮上忙,那就太好了

我的问题是我有一个这样添加的对象表

enemies[enemy_id] = enemy
现在,当地图末尾发生冲突时,我想把敌人从桌子上移除。我已经试着通过

enemies[enemy_id] = nil
但当它到达最后一个敌人时,由于某种原因,桌子已经空了。假设一个表中有3个敌人,我打印表中的计数。第一个被删除,它显示2左,第二个被删除,它显示0左。没有道理

那么,如何从表中删除项呢?我也尝试过table.remove,但我需要输入相同的键,因为它们是敌人的id。如果需要,我可以发布一个示例,因为正如其他建议的那样,
#
不会在稀疏数组上工作,我的解决方案是使用
0
索引(或简单地使用另一个变量)作为计数:

enemies[0] = 0
然后,当你增加一个敌人时,增加计数器,当你移除一个敌人时,减少它。就这么简单。

在Lua表中使用“稀疏键”时,这种模式通常对我有好处:

-- add item to registry
registry[object] = key
registry[key] = object

-- iterate over all items in registry
for k,v in pairs(registry) do 
  if type(k) == "number" then do_something(k,v) end
end

-- remove item with key K from registry:
registry[registry[K]] = nil
registry[K] = nil

-- remove item O from registry:
registry[registry[O]] = nil
registry[O] = nil

不要在稀疏表上使用
#t
(当索引有间隙时),它会返回错误的结果。@Luke不确定您所说的“…我需要为相同的键设置关键帧”是什么意思。