raku - 权重 'randomness' 例程的 'pick'?

标签 raku rakudo

我正在 Perl 6 中创建一个 API 服务器,使用 Cro 框架!该 API 的目的是提供有关 Pokemon 的数据,并提供基于输入数据生成 Pokemon 的端点。产生的因素之一是gender , 在我的 PostgreSQL 数据库中,每个引用 Pokemon 都有一个 gender-ratio包含如下所示的 JSON 值的列:

  "gender-ratio": {
    "default": {
      "Male": 0.25,
      "Female": 0.75
    },
    "alolan": {
      "Male": 0.25,
      "Female": 0.75
    }
  },

你会注意到我在那里有两把 key 叫 defaultalolan ,这是因为口袋妖怪可以有多种形式,但这与这个问题大多无关 - 相关的是实际的性别比例值。这是我的生成方法目前的样子:
method select-gender($pokemon, $form = 'default') {
    enum GENDER ( <Male Female> );

    return GENDER.pick;
}

默认 pick是随机的,在这种情况下是 50/50。但是,我希望能够根据从数据库返回的比率结果对每个选项的随机性进行加权。我的一个想法是播种 GENDER带有数据库查询结果的枚举,因此对于特定示例,它看起来更像这样:
enum GENDER ( <Male Female Female Female> );

除非其他人对动态改变 pick 的行为有更好的想法。基于我 SELECT 的结果陈述?

最佳答案

使用 Mixroll :

my %gender-ratio =  %(default => {
                             "Male" => 0.25,
                             "Female" => 0.75
                         },
                      alolan => {
                             "Male" => 0.25,
                             "Female" =>  0.75
                         }
                     );

my Mix $default = %gender-ratio<default>.Mix;

for ^10 {
    say $default.roll;
}

关于raku - 权重 'randomness' 例程的 'pick'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55743267/

相关文章:

regex - 如何将变量插入 Perl 6 正则表达式?

parsing - 如何使用 STD.pm6 语法解析 Perl 6 代码?

compiler-errors - "Two terms in a row"错误

raku - 为什么 Rakudo dd 为键入和分配的标量返回 Nil?

windows - 在 Windows 中构建 Rakudo 时的警告

for-loop - perl6/落语 : dereferencing-question

raku - 解析模块规范的语法

c - 如何将用户数据传递给回调函数

error-handling - 将抛出的异常更改为失败的简洁方法?

publish-subscribe - Supply method act 与 tap 之间的区别