Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Random 在Lua中填充表格的随机迭代_Random_Lua_Iteration_Lua Table - Fatal编程技术网

Random 在Lua中填充表格的随机迭代

Random 在Lua中填充表格的随机迭代,random,lua,iteration,lua-table,Random,Lua,Iteration,Lua Table,我试图随机填充一个包含26个值的表。也就是说,我有一个名为rndmalpha的表,我想在整个表中随机插入值。这是我的代码: rndmalpha = {} for i= 1, 26 do rndmalpha[i] = 0 end valueadded = 0 while valueadded = 0 do a = math.random(1,26) if rndmalpha[a] == 0 then rndmalpha[a] = "a" valueadded = 1

我试图随机填充一个包含26个值的表。也就是说,我有一个名为rndmalpha的表,我想在整个表中随机插入值。这是我的代码:

rndmalpha = {}
for i= 1, 26 do
  rndmalpha[i] = 0
end

valueadded = 0

while valueadded = 0 do
  a = math.random(1,26)
  if rndmalpha[a] == 0 then
    rndmalpha[a] = "a"
    valueadded = 1
  end
end

while valueadded = 0 do
  a = math.random(1,26)
  if rndmalpha[a] == 0 then
    rndmalpha[a] = "b"
    valueadded = 1
  end
end


代码会一直重复到z,所以这只是一个一般的想法。然而,我遇到的问题是,当表格被填满时,随机点击次数就会减少。这可能会冻结程序,尤其是在最后的字母中,因为只有2-3个数字的值为0。那么,如果while循环在最终到达最后一个号码之前经历了一百万次调用,会发生什么呢?有没有一种有效的方法可以说,嘿,忽略第6、13、17、24和25位,专注于填补其他职位。?就这一点而言,有没有更有效的方法来完成我正在做的全部工作?

不要对每个字母进行随机操作,而是对表格进行一次检查,然后对每个位置进行随机操作。你正在使用的方法可能会花费很长时间,因为你可能永远都不会击中它

永远不要重复你自己。永远不要重复你自己!如果你太频繁地复制和粘贴,那肯定是出了问题。使用第二个表格包含所有可能的字母,然后从中随机选择

letters = {"a","b","c","d","e"}
numberOfLetters = 5

rndmalpha = {}

for i in 1,26 do
    rndmalpha[i] = letters[math.random(1,numberOfLetters)]
end

不要对每个字母进行随机选择,而是对表格进行一次检查,然后在每个位置随机选择一些内容。你正在使用的方法可能会花费很长时间,因为你可能永远都不会击中它

永远不要重复你自己。永远不要重复你自己!如果你太频繁地复制和粘贴,那肯定是出了问题。使用第二个表格包含所有可能的字母,然后从中随机选择

letters = {"a","b","c","d","e"}
numberOfLetters = 5

rndmalpha = {}

for i in 1,26 do
    rndmalpha[i] = letters[math.random(1,numberOfLetters)]
end

您使用的算法似乎非常低效,在我看来,您所需要的只是初始化一个包含所有字母的表:

math.randomseed(os.time())
local t = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}    
然后洗牌元素:

for i = 1, #t*2 do
    local a = math.random(#t)
    local b = math.random(#t)
    t[a],t[b] = t[b],t[a]
end  

将元素交换为t*2次可以很好地提供随机性。如果需要更多随机性,请增加随机数,并使用更好的随机数生成器。C库提供的随机函数通常不是很好。

您使用的算法似乎效率很低,在我看来,您所需要的只是初始化一个包含所有字母的表:

math.randomseed(os.time())
local t = {"a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z"}    
然后洗牌元素:

for i = 1, #t*2 do
    local a = math.random(#t)
    local b = math.random(#t)
    t[a],t[b] = t[b],t[a]
end  

将元素交换为t*2次可以很好地提供随机性。如果需要更多随机性,请增加随机数,并使用更好的随机数生成器。C库提供的随机函数通常不是很好。

这更有意义!有时候,我会把事情复杂化,让事情变得比实际情况困难得多。非常感谢。这就更有意义了!有时候,我会把事情复杂化,让事情变得比实际情况困难得多。非常感谢。如果不是于浩,这将是我接受的答案。就像上面所说的,我有时会把事情复杂化,这样做会更好。谢谢你提供的额外信息。如果不是因为于浩,这将是我接受的答案。就像上面所说的,我有时会把事情复杂化,这样做会更好。谢谢你提供更多的信息。