我正在 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 叫
default
和 alolan
,这是因为口袋妖怪可以有多种形式,但这与这个问题大多无关 - 相关的是实际的性别比例值。这是我的生成方法目前的样子: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
的结果陈述?
最佳答案
使用 Mix和 roll
:
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/