[#42735] [Ruby 1.9-Feature#4147][Open] Array#sample で重みを指定したい — Yoji Ojima <redmine@...>

Feature #4147: Array#sample で重みを指定したい

52 messages 2010/12/10
[#42791] [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Shyouhei Urabe <redmine@...> 2010/12/18

チケット #4147 が更新されました。 (by Shyouhei Urabe)

[#42800] Re: [Ruby 1.9-Feature#4147][Assigned] Array#sample で重みを指定したい — Masaya TARUI <tarui@...> 2010/12/19

> じゃあ反対ないので実装はともかく、この仕様は基本入れる方向で考えましょう。反対の人は意思表示お早めに。

[#42763] [Ruby 1.9-Bug#4159][Open] test_block_variables(TestRipper::ParserEvents) が失敗する — Kouhei Yanagita <redmine@...>

Bug #4159: test_block_variables(TestRipper::ParserEvents) が失敗する

8 messages 2010/12/14

[#42894] [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Shyouhei Urabe <redmine@...>

Feature #4207: これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには

24 messages 2010/12/26
[#42935] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/04

むらたです。

[#42936] Re: [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Kenta Murata <muraken@...> 2011/01/05

むらたです。

[ruby-dev:42794] Re: [Ruby 1.9-Feature#4147] Array#sample で重みを指定したい

From: Yusuke ENDOH <mame@...>
Date: 2010-12-19 02:24:53 UTC
List: ruby-dev #42794
遠藤です。

2010年12月18日16:20 Yoji Ojima <[email protected]>:
> 一週間経って特に反対意見はないようですが、実際にパッチを書いたら取り込んでいただけるものなのでしょうか。積極的な賛成がなければダメでしょうか。

機能自体には反対ではないものの、API がよくないと思います。
これだと毎回 each することになりますよね。

あまりいい対案がないので黙っていたのですが、どうしてもやるとしたら、

  omikuji_box = %w(大吉 中吉 小吉 凶)
  omikuji_weight = [1000, 1100, 1110, 1111]

  omikuji = omikuji_box.sample(weight: omikuji_weight)

がましかなあと思います。
これなら、重み分布を使い回せますし、最後の値を見れば each しなくても
合計値がとれますし、要素数が多くても二分探索が使えます。

見た目がいまいちなのと、配列の長さが異なる場合や重み分布がソートされて
いない場合などのコーナーケースが気にはなります。
ただ、この機能の用途を考えると、モンテカルロシミュレーションがすごく
出てきそうなので、非効率的にしか実装できない API は避けるべきだと
思います。

-- 
Yusuke Endoh <[email protected]>

In This Thread