【Ruby】sampleメソッドで配列からランダムに値を取得する

「配列の中からランダムに要素を取得する処理をRubyで実装したい」

こういった方向けに記事を書きます。

最後まで読めばランダム取得のロジックをたった1行で実装できるようになります。

この記事を書いているぼくは実務経験1年。独学で未経験から従業員300名以上の自社開発企業へ転職しました。実務ではVue.jsとRailsを毎日書いています。

この記事で使用するRubyのバージョンはRuby 3.1.4です。

目次

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を返す
  • 数値以外を引数に渡した場合は例外が発生する

サービスの画面に数種類の広告をランダムに表示させたい場合などによく使います。

みなさんの参考になれば幸いです。

参考文献

技術書が好きなエンジニア向け

あわせて読みたい
「技術書の内容が頭に入らない」を防ぐ5つの読書方法 「技術書の内容が頭に入らない」を防ぐための5つの読書方法を紹介します。最後まで読めば効率よくインプットできるようになります。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

未経験でSESから従業員300名以上の自社開発企業に転職しました。業務や個人開発で直面した問題や、転職・学習の経験を発信していきます。

コメント

コメントする

目次