「配列の中からランダムに要素を取得する処理をRubyで実装したい」
こういった方向けに記事を書きます。
最後まで読めばランダム取得のロジックをたった1行で実装できるようになります。
この記事を書いているぼくは実務経験1年。独学で未経験から従業員300名以上の自社開発企業へ転職しました。実務ではVue.jsとRailsを毎日書いています。
目次
sampleメソッドで配列からランダムに値を取得する
結論として、Rubyに用意されているsample
メソッドを使います。
sampleメソッドとは?
sample
メソッドは配列の要素からランダムに要素を返すメソッドです。
以下のように使用します。
irb(main):001:0> array = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb(main):002:0> array.sample
=> 9
irb(main):003:0> array.sample
=> 6
irb(main):004:0> array.sample
=> 4
配列に要素がない場合はnil
を返します。
irb(main):005:0> [].sample
=> nil
またsample
メソッドの引数に数値を指定することで、ランダムに返す要素の数を指定することも可能です。
irb(main):006:0> array = (1..10).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
irb(main):007:0> array.sample(4)
=> [9, 8, 3, 4]
irb(main):008:0> array.sample(4)
=> [9, 6, 2, 4]
irb(main):009:0> array.sample(4)
=> [1, 6, 10, 8]
数値以外を引数に指定した場合、暗黙の型変換は行われず、例外が発生するようです。
irb(main):009:0> array.sample("3")
<internal:array>:66:in `sample': no implicit conversion of String into Integer (TypeError)
from (irb):9:in `<main>'
from /usr/local/lib/ruby/gems/3.1.0/gems/irb-1.4.1/exe/irb:11:in `<top (required)>'
from /usr/local/bin/irb:25:in `load'
from /usr/local/bin/irb:25:in `<main>'
おわりに
この記事では、配列の中からランダムに要素を取得できるsample
メソッドについて解説しました。
sample
メソッドは配列の中からランダムに要素を取得する- 引数を指定するとその数だけ取得できる
- 配列の要素が存在しない場合は
nil
を返す - 数値以外を引数に渡した場合は例外が発生する
サービスの画面に数種類の広告をランダムに表示させたい場合などによく使います。
みなさんの参考になれば幸いです。
コメント