LoginSignup
0
0

More than 3 years have passed since last update.

railsのArrayで範囲外のindexを指定した時にループさせる方法

Posted at

通常、Arrayクラスのオブジェクトで範囲外のindexを指定するとnilが返ります。

> message_array = ['success', 'warning', 'info', 'danger']
> message_array[4]
=> nil

しかし
範囲外のindexを指定した際、良しなにindexをループさせて欲しい場面があったので、紹介します。
(上記の例だとmessage_array[4]を指定した時にsuccessを返して欲しい)

動作環境

rails 5.2.2.1

準備

Arrayクラスを拡張する

lib/core_extにArrayクラス拡張用のファイルを作成します。

/lib/core_ext/array.rb
class Array
  def values_at_loop(index)
    self[index % length]
  end
end

initializerで上記ファイルをrequireします。

/config/initializers/extensions.rb
require 'core_ext/array'

準備は以上です。

実行方法

values_at_loop(index)の形式でメソッドを呼び出します。

> message_array = ['success', 'warning', 'info', 'danger']
=> ["success", "warning", "info", "danger"]
> message_array.values_at_loop(0)
=> "success"
> message_array.values_at_loop(1)
=> "warning"
> message_array.values_at_loop(2)
=> "info"
> message_array.values_at_loop(3)
=> "danger"
> message_array.values_at_loop(4)
=> "success"
> message_array.values_at_loop(5)
=> "warning"
> message_array.values_at_loop(6)
=> "info"
> message_array.values_at_loop(7)
=> "danger"
> message_array.values_at_loop(8)
=> "success"
> message_array.values_at_loop(-1)
=> "danger"

まとめ

使い所はめちゃめちゃ少ないですが、ルーレットのような回転する構造を配列で表現したい時などに使えそうです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0