[#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:42811] Re: [Ruby 1.9-Feature#3647] Array#sample(n, replace=false)

From: Yusuke ENDOH <mame@...>
Date: 2010-12-19 14:22:05 UTC
List: ruby-dev #42811
遠藤です。

2010年12月11日23:38 Yukihiro Matsumoto <matz@ruby-lang.org>:
> まつもと ゆきひろです
>
> In message "Re: [ruby-dev:42751] Re: [Ruby 1.9-Feature#3647] Array#sample(n, replace=false)"
> ? ?on Sat, 11 Dec 2010 23:04:11 +0900, Masaya TARUI <tarui@prx.jp> writes:
>
> |失礼ながら特に議論した形跡が分からなかったんですが、
> |どこかに合意が取れない項目があったんでしょうか?
>
> 「本当に必要なの」ってところがですかね。

同じく、この機能は

  (1..n).map { ary.sample }

で済むので、

  ary.sample(replace: true)

じゃ字数も変わらないし、本当にいるのかなという気がします。
まあ Array#sample 自体も ary[rand(ary.size)] で済むといえば
済むのですが。


> |何もないよりはキーワード引数でもあった方がいいとは思っていますが、
> |想定してるものは、最初のむらけんさんの提案の方です。
> |
> |[1,2,3,4].sample ?#=>1個なので再抽選関係なし
> |[1,2,3,4].sample(3) #=>再抽選なし
> |
> |ここまでが現在の仕様ですが、
> |
> |[1,2,3,4].sample(3,true) #=>再抽選あり
> |[1,2,3,4].sample(3,false) #=>再抽選なし
> |
> |が追加になります。
>
> 反対します。trueの意味がなんであるか、絶対にわからなくなるか
> らです。たとえば現在でも instance_methods は真偽値をオプショ
> ンとして受け付けますが、trueの時にどう振舞うかは私でさえ覚え
> ていられません。これは失敗だったと思っています。

まつもとさんと同じでこれには反対です。


入れるとしたら sample(何かキーワード: true) だと思うんですが、
元の提案の "replace" は、非ネイティブかつ統計用語に詳しくない
私としては、選択された要素を破壊的に取り除くように思えてしまう
(つまり以下の挙動を期待する) ので嫌らしいです。

  ary = [1, 2, 3]
  p ary.sample(replace: true) #=> 1
  p ary #=> [2, 3]

よく考えるとこの挙動は別に replace してないんですが、replace
には破壊的な語感がありすぎてこんなふうに思ってしまいます。
# 余談ですが、この挙動はこの挙動で欲しい。

duplication: true とかどうなのかなあ。ruby-core に持っていくと
いいかもしれないですね。英語圏だと replacement で完全制覇されて
いるという噂もありますが。

-- 
Yusuke Endoh <mame@tsg.ne.jp>

In This Thread