Ruby、Enumerableから重み付きでランダムに要素を取り出すgemつくった

類似gemとしては

というのがあったけど、当方のユースケースには合わなかったので自作した。

weighted_sample

$ gem install weighted_sample

で入ります。

require 'weighted_sample'

[1, 9, 90].weighted_sample_by {|x| x}
# => 1(1%), 9(9%), 90(90%)

任意のEnumerableで使えるけど、内部的に2回eachしてるのでご留意ください。
重みに使えるのは、今のところ整数のみです(要望があればFloatにも対応するんじゃないかな or プルリクせよ)。