【问题标题】:Selecting random phrase from a list从列表中选择随机短语
【发布时间】:2009-09-08 23:27:09
【问题描述】:

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

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

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

有没有办法保持

text1
text2
text3
text3

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

【问题讨论】:

    标签: random lua arguments


    【解决方案1】:

    对于多达几百个元素的列表,以下方法将起作用:

    消息 = { “文本1”, “文本2”, “文本3”, “文本4”, -- ... } SendChatMessage(GetRandomArgument(unpack(messages)), "RAID")

    对于更长的列表,您最好将 GetRandomArgument 替换为 GetRandomElement,这将采用单个表作为其参数并从表中返回一个随机条目。

    编辑: Olle's answer 展示了一种可能实现类似GetRandomElement 的方式。但它在 Lua 5.1 中已弃用的每次调用中都使用了 table.getn,而它的替代品 (table.maxn) 的运行时成本与表中元素的数量成正比。

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

    在保证文本数组中没有间隙的情况下,您可以像这样实现GetRandomElement

    函数 GetRandomElement(a) 返回一个[math.random(#a)] 结尾

    这样你就可以这样发送消息了:

    SendChatMessage(GetRandomElement(messages), "RAID")

    【讨论】:

      【解决方案2】:

      您想要一个表格来包含您的短语,例如

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        • 2012-04-30
        相关资源
        最近更新 更多