Array#sample

 

先日Rubyでコードを書いていて、「配列の中から1つだけランダムに選んで取り出す」という処理が必要になった。

ドキュメントを色々調べていると、Arrayクラスにはインスタンスメソッドでsampleというものがあり、ちょうどやりたいことができるようだった。

#!/usr/bin/env ruby

a=[1,2,3,4,5]

3.times do
    puts a.sample
end

この例だと、配列aの中からランダムにどれかを取り出し、表示される。例えば実行例として、

4
2
5

となる。

このメソッドを使ったプログラムをある環境でテストした後、別の環境に持って行くと動かなかった。

原因はRubyのバージョンの違い。

元の環境はRuby 1.9.2を使っていて、後の環境はRuby 1.8.3を使っていた。調べてみると、Array#sampleはRuby1.8.7から導入されたものらしく、それまではArray#choiceというメソッドだったようだ。ただ、手元のRuby 1.8.7 (2011-06-30 patchlevel 352)ではArray#sampleは動かなかった。逆に1.9以降Array#choiceはなくなったらしい。