[ruby-trunk - Feature #4147] Array#sample で重みを指定したい

Issue #4147 has been updated by akr (Akira T.).

開発ミーティングで話したところ、何を実装すればいいのか仕様がいまひとつはっきりしていないのが
問題で進まないということに一致を見ました。

とりあえず、私は、repeat: オプションとブロックによる重みを実装するのがいいのではないか、と思います。

ここでブロックは与えられた値に対する重みを返すものとします。(累積確率ではありません)

(累積確率よりも単なる重みの方が単純でわかりやすそうというのが、
単にブロックを与えたときに重みと解釈する理由です。
もし累積確率が必要なら、将来的になにかオプション引数で指定するというのはありえます。)

Feature #4147: Array#sample で重みを指定したい
https://bugs.ruby-lang.org/issues/4147#change-28017

Author: oj (Yoji Ojima)
Status: Assigned
Priority: Normal
Assignee: shyouhei (Shyouhei U.)
Category:
Target version: 2.0.0

=begin
Array#sample にブロックを渡したとき、ブロックの戻り値を要素の重みとして使用するのはいかがでしょうか。

下記のサンプルで、“大吉” が “凶” の 1000 倍の確率で選択されるようにしたいです。

omikuji_box = [
{:name => “大吉”, :weight => 1000},
{:name => “中吉”, :weight => 100},
{:name => “小吉”, :weight => 10},
{:name => “凶”, :weight => 1}
]
omikuji = omikuji_box.sample {|v| v[:weight] }
puts omikuji[:name]
=end