https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2011-11-07T20:59:08Z
Ruby Issue Tracking System
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=21968
2011-11-07T20:59:08Z
sorah (Sorah Fukumori)
her@sorah.jp
<ul></ul><p>もっと良いネーミングはない物でしょうかねえ.</p>
<p>ネーミングが微妙なような気がしてならない.</p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=21971
2011-11-07T22:59:22Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul></ul><p>遠藤です。</p>
<p>2011年11月7日15:43 Masaki Matsushita <a href="mailto:glass.saga@gmail.com" class="email">glass.saga@gmail.com</a>:</p>
<blockquote>
<p>ランダムに選択した要素をレシーバから取り除いて返すメソッドArray#sample!の追加を提案します。</p>
</blockquote>
<p>この機能はかつてから要望がありますが、まつもとさんが強硬に<br>
反対しています。<a href="https://blade.ruby-lang.org/ruby-core/18104">[ruby-core:18104]</a> <a href="https://blade.ruby-lang.org/ruby-core/18165">[ruby-core:18165]</a></p>
<p>sample! という名前が最大のネックのようですので、他の名前を<br>
考えるといいと思います。<br>
(案外まつもとさんの気が変わってる可能性もありますが)</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=21976
2011-11-08T00:53:35Z
Anonymous
<ul></ul><p>近藤です</p>
<blockquote>
<p>配列からランダムに要素を取り出したい場合には</p>
<p>a = (1..5).to_a<br>
a.delete_at(rand(a.size)) #=> 3<br>
p a #=> [1, 2, 4, 5]</p>
<p>などと書く必要がありましたが、</p>
</blockquote>
<p>a = (1..5).to_a.shuffle.each<br>
a.next #=> 3</p>
<blockquote>
<p>引数を指定した場合は、その数だけレシーバから要素を取り除き、新たな配列に取り除いた要素を入れて返します。</p>
<p>a = (1..10).to_a<br>
p a.sample!(5) #=> [5, 4, 2, 6, 7]<br>
p a #=> [1, 3, 8, 9, 10]</p>
</blockquote>
<p>a = (1..10).to_a.shuffle.each<br>
a.take(3) #=> [5, 4, 2, 6, 7]</p>
<p>Enumeratorを使ったほうが直感的だと思います。</p>
<hr>
<p>Mitsuhiro Kondo<br>
<a href="mailto:miche@mac.com" class="email">miche@mac.com</a></p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=21994
2011-11-08T15:39:33Z
Glass_saga (Masaki Matsushita)
glass.saga@gmail.com
<ul></ul><p>Mon, 7 Nov 2011 22:53:21 Yusuke Endoh :</p>
<blockquote>
<p>sample! という名前が最大のネックのようですので、他の名前をえるといいと思います。</p>
</blockquote>
<p>思いつくものとしてはpickやdrawといったところでしょうか。<br>
個人的にはpickがしっくりきます。</p>
<p>Tue, 8 Nov 2011 00:44:07 近藤 充弘 :</p>
<blockquote>
<p>Enumeratorを使ったほうが直感的だと思います</p>
</blockquote>
<p>Enumerator#nextでは列挙状態が進みますが、Enumerable#takeでは進まないという問題があります。</p>
<p>a = (1..10).to_a.shuffle.each<br>
a.take(3) #=> [10, 2, 6]<br>
a.take(3) #=> [10, 2, 6]</p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=22000
2011-11-08T20:53:16Z
mrkn (Kenta Murata)
muraken@gmail.com
<ul></ul><p>むらたです。</p>
<p>(2011.11.08 15:39 ), Masaki Matsushita wrote:</p>
<blockquote>
<p>Mon, 7 Nov 2011 22:53:21 Yusuke Endoh :</p>
<blockquote>
<p>sample! という名前が最大のネックのようですので、他の名前をえるといいと思います。</p>
</blockquote>
<p>思いつくものとしてはpickやdrawといったところでしょうか。<br>
個人的にはpickがしっくりきます。</p>
</blockquote>
<p>pick や draw から無作為操作である事を感じられないのは私だけでしょうか?</p>
<p>--<br>
Kenta Murata <a href="mailto:muraken@gmail.com" class="email">muraken@gmail.com</a><br>
1D69 ADDE 081C 9CC2 2E54 98C1 CEFE 8AFB 6081 B062</p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=22002
2011-11-08T21:46:09Z
hasari (Hiro Asari)
asari.ruby@gmail.com
<ul></ul><p>「無作為抽出」は random sampling という用語がありますので、多少長くても Enumerable#random_sampling(n) ぐらいが適切かと思います。<br>
#sample! が駄目で、#random_sampling が長過ぎるとなれば、この概念を導入するのに相応しい名前は無いように思われます。</p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=22003
2011-11-08T21:48:52Z
sorah (Sorah Fukumori)
her@sorah.jp
<ul></ul><p>じゃあsample!になりますかねぇ...</p>
<p>pick からは少なくとも無作為抽出な動作を感じ取ることはできないですね.</p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=22004
2011-11-08T21:52:22Z
Glass_saga (Masaki Matsushita)
glass.saga@gmail.com
<ul></ul><p>確かにpickだけだと無作為に取り出す感じがありませんね。<br>
pick_at_rand あるいは delete_at_rand はどうでしょう?</p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=22005
2011-11-08T22:53:13Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<ul></ul><p>まつもと ゆきひろです</p>
<p>In message "Re: <a href="/issues/5584">[ruby-dev:44825]</a> Re: [ruby-trunk - Feature <a class="issue tracker-2 status-6 priority-4 priority-default closed" title="Feature: Array#sample! (Rejected)" href="https://redmine.ruby-lang.org/issues/5584">#5584</a>][Open] Array#sample!"<br>
on Mon, 7 Nov 2011 22:53:21 +0900, Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a> writes:</p>
<p>|2011年11月7日15:43 Masaki Matsushita <a href="mailto:glass.saga@gmail.com" class="email">glass.saga@gmail.com</a>:<br>
|> ランダムに選択した要素をレシーバから取り除いて返すメソッドArray#sample!の追加を提案します。<br>
|<br>
|この機能はかつてから要望がありますが、まつもとさんが強硬に<br>
|反対しています。<a href="https://blade.ruby-lang.org/ruby-core/18104">[ruby-core:18104]</a> <a href="https://blade.ruby-lang.org/ruby-core/18165">[ruby-core:18165]</a><br>
|<br>
|sample! という名前が最大のネックのようですので、他の名前を<br>
|考えるといいと思います。<br>
|(案外まつもとさんの気が変わってる可能性もありますが)</p>
<p>まだ賛成ではありません。</p>
<p>最大の理由がこのメソッドが副作用を積極的に利用・期待している<br>
点で、最近流行のプログラミングスタイルに逆行していることで、<br>
さらにsample!は他のArrayのメソッドと!による意味が変化してい<br>
るという点でこの名前による導入には絶対に賛成しません。</p>
<p>要するに他のArrayクラスの!メソッドの基本的な動作は、「!の無<br>
いものは元のArrayをコピーして操作したものを返す。元の配列は変<br>
化なし。操作によって変化しない場合にはnilを返す※」、というも<br>
のなのに対し、提案されているsample!は「sampleと同じ操作をする<br>
と<em>同時に</em>元の配列を変更する」というものです。ここが気に入ら<br>
ない。</p>
<p>もちろん、副作用を全否定するわけではないので、このメソッドが<br>
あるとどれだけ便利であるかを力説された上で、適切と思われる名<br>
前を提案していただければ、絶対に無理とまでは言いませんが、ハー<br>
ドルは高いと思います。</p>
<p>※ 正確には Array#slice! はこの原則に従ってませんが、だからと<br>
いって原則に従ってメソッドを増やすつもりはありません</p>
<pre><code> まつもと ゆきひろ /:|)
</code></pre>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=22006
2011-11-08T23:37:55Z
sorah (Sorah Fukumori)
her@sorah.jp
<ul><li><strong>File</strong> <a href="/attachments/2205">by_sorah.diff</a> <a class="icon-only icon-download" title="Download" href="/attachments/download/2205/by_sorah.diff">by_sorah.diff</a> added</li></ul><p>パッチをちょっと改善しました. (see by_sorah.diff)</p>
<ul>
<li>Array#sample, Array#sample! で処理が共通な部分が多いため,内部にさらに関数呼び出しを加え,フラグによって<br>
動作の分岐をするようにした</li>
</ul>
<p>本当はテストケースも書こうと思ったのですが,明日やります…</p>
Ruby master - Feature #5584: Array#sample!
https://redmine.ruby-lang.org/issues/5584?journal_id=25251
2012-03-27T23:54:03Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Rejected</i></li></ul><p>まつもとさんの意見に対して feedback がないので閉じます。</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p>