制作具有所有不同值的随机 table?

Making a randomized table with all different values?

我正在尝试制作一个随机 table 占用更少的组织代码 space。

当前代码:

math.randomseed(tick())
local MyTable = {math.random(0, 100), math.random(0, 100), math.random(0, 100), math.random(0, 100)}

for i, v in ipairs(MyTable) do
    print(i.."- "..v)
end

预期输出:

1- some random number
2- a different random number
3- a different random number
4- a different random number

这确实给了我想要的输出,但是第 3 行的长度 local MyTable = {...} 处理起来很烦人,所以我想知道是否有办法可以分配一个变量来给出一个随机数并把代替每个 table 索引。

顺便说一句,我已经测试过了:

math.randomseed(tick())
local rand = math.random(0, 100)
local MyTable = {rand, rand, rand, rand}

for i, v in ipairs(MyTable) do
    print(i.."- "..v)
end

这个问题是因为 rand 是一个预定义变量,它为每个索引输出相同的数字。

如果您有解决方案,那将非常有帮助,因为我正在尝试使用 30 个长索引随机 tables 并且很难完成。 谢谢。

为了具体回答你的问题,“你可以分配一个变量来给出一个随机数”,你可以像这样将一个函数保存到一个变量中:

local rnd = function() return math.random(0, 100) end
local MyTable = { rnd(), rnd(), rnd(), rnd() }

但与其手动添加这些值,不如使用循环来插入任意数量的条目?虽然这多了几行代码,但它更容易阅读,并且在较长的 运行 中可能会更好。

math.randomseed(tick())

local MyTable = {}

-- generate a bunch of random numbers
local entriesToAdd = 30
for i = 1, entriesToAdd, 1 do
    MyTable[i] = math.random(0, 100)
end

-- print the entries
for i, v in ipairs(MyTable) do
    print(i.."- "..v)
end