表中的Randoming值然后在Lua中删除它

时间:2010-12-04 16:37:30

标签: lua lua-table

我有一个包含4个值的表。

例如:

2
4
1
3

我使用一个函数来逐步查找表格,让我们通过使用对来说出数字1并获得它在表格中的位置。

然后我使用table.remove从该位置删除1。我现在要做的是压缩表格,使其长度为3个值

2
4
3

我对Lua很新,所以对我很温柔。 :)

我所拥有的就是这个:

CloseRandomConsole = math.random(1,(#ConsoleTable)) 

If CloseRandomConsole == 1 then 
 for key, value in pairs(ConsoleTable) do 
 if value == "1" then 
  table.remove(ConsoleTable, key) 
 break 
 end 
end 

我知道我哪里出错但我不知道如何解决它。

math.random(1,(#ConsoleTable))

我只希望能够在表格中的一个值之间随机。当我发誓说我想要删除它时,我会留下三个其他值来随机。

我让你感到困惑吗? :)

2 个答案:

答案 0 :(得分:2)

table.remove(ConsoleTable, key)确实会从表中删除一个值,从而将其大小减小1.因此,下次调用math.random(1,(#ConsoleTable))时,其范围也将减小一个。说实话,看起来你做得很好,我不确定问题是什么。

编辑:这个单行怎么样?

table.remove(ConsoleTable, math.random(1, #ConsoleTable))

我认为这会从表中随机删除一个“控制台”。也许如果你能尝试,如果它不是你想要的,详细解释什么是错的,我们可以尝试更多的东西。

答案 1 :(得分:2)

在迭代它时,从表中删除项目通常被认为是错误的编程习惯。许多语言都因此而感到困惑。如果你真的想这样做那么你最好创建第二个镜像表,然后在从原始表中删除项目时对其进行迭代。

但是,我建议将控制台的状态存储在表中,并将其设置为非活动状态(可能是状态0)并使其他状态保持活动状态(状态1)。然后玩家可以将一些设置为活动状态,然后老板选择其中一个并再次停用它。您需要更多代码行,但它应该更灵活,更容易理解。