不在lua中生成唯一随机值。

我试图在每次迭代后获得一个唯一的随机值。我使用的是table.remove技巧来完成这个任务。我不知道为什么它没有给我一个唯一的随机值。请帮帮我 :)

点赞
用户257418
用户257418

以下是翻译结果,并保留原本的 markdown 格式:

这些代码行从表中提取一个值,然后错误地将该值本身用作 table.remove 的索引:

    randNum = t[mRandom(tableSize)]
    table.remove(t, randNum)

你真正想写的是:

    randIndex = mRandom(tableSize)
    randNum = t[randIndex]
    table.remove(t, randIndex)
2014-02-15 14:33:57
用户2260388
用户2260388

问题出在这一行代码:

randNum = t[mRandom(tableSize)]

假设在第一次迭代中您获得了一个随机点数为1。则randNum的值被计算为:

randNum = t[1]
randNum = 1

然后下一句语句将从表格中删除第二个条目。在这种情况下,表格变为:

t = {2, 3, 4, 5}

在下一次迭代中,随机函数范围为1-4。假设新滚动的数是4。现在randNum被计算为:

randNum = t[4]
randNum = 5

接下来的语句尝试删除表格中的第5个条目。但是第5个条目不存在。因此您的代码将无法正常工作。

为了解决问题,您可以使用以下代码更改随机数生成:

randSize = mRandom(tableSize)
randNum  = t[randSize]
table.remove(t, randSize)
2014-02-15 14:46:18