Random 从表中随机选择一项
我的目标是从Lua中的表中随机挑选一个项目 这是我目前得到的,但目前不起作用:Random 从表中随机选择一项,random,lua,Random,Lua,我的目标是从Lua中的表中随机挑选一个项目 这是我目前得到的,但目前不起作用: local myTable = { 'a', 'b', 'c', 'd' } print( myTable[ math.random( 0, #myTable - 1 ) ] ) 如何修复上述代码,使其按预期工作?(或者我可以使用哪种其他方法?测试: t = {'a', 'b', 'c'} print(t[0]) 给出nil。事实上,0超出了范围(请尝试t[20])。。。所以random必须是从1到#myTabl
local myTable = { 'a', 'b', 'c', 'd' }
print( myTable[ math.random( 0, #myTable - 1 ) ] )
如何修复上述代码,使其按预期工作?(或者我可以使用哪种其他方法?测试:
t = {'a', 'b', 'c'}
print(t[0])
给出nil
。事实上,0超出了范围(请尝试t[20]
)。。。所以random必须是从1到#myTable
(包括在内),因为如果只写exp
,则a的第一个元素被标记(索引)为1,请参见(“最后,exp形式的字段相当于[i]=exp,其中i是从1开始的连续整数。”)
如果只传递一个参数n
,则获得一个从1到n
的随机数。这修复了您的示例:
print(myTable[math.random(#myTable)])
Lua从1索引表,不像C、Java等从0索引数组。这意味着,在您的表中,有效索引是:1、2、3、4。您需要的是以下内容:
print( myTable[ math.random( #myTable ) ] )
当使用一个参数调用时,
math.random(n)
返回一个从1到n
的随机整数,包括。我认为这个问题还需要一个更一般的答案。使用从1开始的整数序列构建lua表没有限制。钥匙可以是任何东西——它们甚至可以是其他lua表!在这种情况下,像#myTable这样的函数可能会给出一个您不期望的答案(在没有任何自定义元表功能的情况下使用)。获取表中所有键的唯一可靠方法是对其进行迭代:
-- iterate over whole table to get all keys
local keyset = {}
for k in pairs(myTable) do
table.insert(keyset, k)
end
-- now you can reliably return a random key
random_elem = myTable[keyset[math.random(#keyset)]]
我还要补充一点,如果您的所有键都是从1开始的数字序列,那么原始的解决方案将非常有效。每当您将表创建为
myTable={'a'、'b'、'c'}
时,就会发生这种情况。因此,在以这种方式构建表的情况下,从表中获取随机元素的速度会更快。我个人使用了以下受@ahmadh启发的函数
function random_elem(tb)
local keys = {}
for k in pairs(tb) do table.insert(keys, k) end
return tb[keys[math.random(#keys)]]
end
我想我会加上这个。是,默认情况下,lua数组中的第一个索引为1。但是,您可以让它从0开始,如下所示:array={[0]='a','b','c'}print(array[0])>>a'b'将在索引1和'c'在索引2处跟进……社区鼓励在代码中添加解释,而不是纯粹基于代码的答案(请参阅)。
table = {'Apple', 'Banana', 'Orange', 'Watermelon' , 'lychee'} --my table have 5 item.
rand= math.random(1~5) --create a random number numbers 1 to 5 if more than 5 then the value is nil.
print(rand)
print(table[rand]) --unite the random number and item it will display 5 random items in the table.
function randomObjectFromTable(t)
return t[math.random(1, #t)]
end