从 Lua 表中随机选择一个值,然后将其删除。

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

比如说:

2
4
1
3

我使用一个函数通过使用 pairs 来遍历表格,查找数字“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))

我只想能够在表格中随机一个值。当我随机到那个值时,我想把它从表格中移除,这样我就留下了其他三个值随机选择。

我是否把你搞糊涂了? :)

原文链接 https://stackoverflow.com/questions/4354544

点赞
stackoverflow用户4323
stackoverflow用户4323

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

编辑:这个一行代码怎么样?

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

我认为这将随机删除表中的一个“控制台”。也许如果您可以尝试并且不是您想要的,请详细解释存在什么问题,我们可以尝试更多的事情。

2010-12-04 16:45:45
stackoverflow用户635130
stackoverflow用户635130

通常认为在遍历表时删除其中一项是不好的编程实践。许多编程语言对此都相当困惑。如果您真的想要这样做,那么最好创建第二个镜像表,然后在从原始表中删除项的同时遍历镜像表。

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

2011-02-26 02:35:28