先日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はなくなったらしい。