From: Hiro Asari Date: 2011-11-08T21:46:13+09:00 Subject: [ruby-dev:44833] [ruby-trunk - Feature #5584] Array#sample! Issue #5584 has been updated by Hiro Asari. 「無作為抽出」は random sampling という用語がありますので、多少長くても Enumerable#random_sampling(n) ぐらいが適切かと思います。 #sample! が駄目で、#random_sampling が長過ぎるとなれば、この概念を導入するのに相応しい名前は無いように思われます。 ---------------------------------------- Feature #5584: Array#sample! http://redmine.ruby-lang.org/issues/5584 Author: Masaki Matsushita Status: Open Priority: Normal Assignee: Category: core Target version: 2.0.0 =begin ランダムに選択した要素をレシーバから取り除いて返すメソッドArray#sample!の追加を提案します。 配列からランダムに要素を取り出したい場合には a = (1..5).to_a a.delete_at(rand(a.size)) #=> 3 p a #=> [1, 2, 4, 5] などと書く必要がありましたが、Array#sample!があれば a = (1..5).to_a a.sample! #=> 4 p a #=> [1, 2, 3, 5] と簡潔に書く事ができます。 引数を指定した場合は、その数だけレシーバから要素を取り除き、新たな配列に取り除いた要素を入れて返します。 a = (1..10).to_a p a.sample!(5) #=> [5, 4, 2, 6, 7] p a #=> [1, 3, 8, 9, 10] レシーバから選択した要素を取り去ってしまう事以外は、Array#sampleと同じ動作をします。 [].sample! #=> nil [].sample!(1) #=> [] [1,2,3].sample!(random: rand) #=> 2 patchを添付します。 =end -- http://redmine.ruby-lang.org