2

我有一个包含 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))

我只希望能够在表中的一个值之间随机选择。当我随机化该 vlue 时,我希望将其移除,这样我将剩下三个其他值可供随机选择。

我让你感到困惑吗?:)

4

2 回答 2

2

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

编辑:这个单线怎么样?

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

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

于 2010-12-04T16:45:45.087 回答
2

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

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

于 2011-02-26T02:35:28.650 回答