从列表中选择随机短语

时间:2009-09-08 23:27:09

标签: random lua arguments

我一直在玩一个.lua文件,该文件使用以下行传递一个随机短语:

SendChatMessage(GetRandomArgument("text1", "text2", "text3", "text4"), "RAID") 

我的问题是我有很多短语,而且一行代码确实非常长。

有没有办法持有

text1
text2
text3
text3

在代码中的其他位置(或外部)列表中,并从主代码中调用随机值。这将使维护文本选项列表更容易。

2 个答案:

答案 0 :(得分:3)

对于最多几百个元素的列表,以下内容将起作用:

messages = {
    "text1",
    "text2",
    "text3",
    "text4",
    -- ...
}
SendChatMessage(GetRandomArgument(unpack(messages)), "RAID")

对于较长的列表,您可以将GetRandomArgument替换为GetRandomElement,将单个表作为其参数,并从表中返回一个随机条目。

修改: Olle's answer显示了可能实施GetRandomElement之类的方式。但它在Lua 5.1中不推荐使用的每个调用上使用table.getn,并且其替换(table.maxn)的运行时成本与表中元素的数量成比例。

仅当正在使用的表可能在其数组部分中缺少元素时,才需要函数table.maxn。但是,在这种情况下要选择的项目列表中,可能没有理由需要在列表中允许漏洞。如果您需要在运行时编辑列表,可以始终使用table.remove删除项目,因为它也会缩小差距。

如果保证文本数组没有间隙,那么您可以像这样实现GetRandomElement

function GetRandomElement(a)
    return a[math.random(#a)]
end

这样你就可以发送这样的信息:

SendChatMessage(GetRandomElement(messages), "RAID")

答案 1 :(得分:2)

您希望表格包含您的短语,例如

phrases = { "tex1", "text2", "text3" }
table.insert(phrases ,"text4") -- alternative syntax
SendChatMessage(phrases[math.random(table.getn(phrases))], "RAID") 

注意: getn获取表格的大小; math.random获取一个随机数(最大值为短语表的大小),phrases[]语法返回[]内索引处的表元素。