From: Masaki Matsushita Date: 2011-11-07T15:43:57+09:00 Subject: [ruby-dev:44817] [ruby-trunk - Feature #5584][Open] Array#sample! Issue #5584 has been reported by Masaki Matsushita. ---------------------------------------- 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