Ruby範囲でインデックス操作
Ruby初心者のための範囲の基本
Rubyで連続した値を扱うときに便利なのが範囲(Range)です。範囲は「開始値..終了値」または「開始値...終了値」の形で表現され、数値や文字列、日付などを連続データとして扱うことができます。範囲オブジェクトはイテレータとしても機能し、forループやeachメソッドで簡単に走査できます。
Rangeオブジェクトの使い方
以下のようにRangeオブジェクトを作成し、配列に変換したり、メソッドに渡したりできます。
range = 1..5
array = range.to_a # => [1, 2, 3, 4, 5]
range.each { |n| puts n }
文字列の範囲も同様に扱えます。例えば「a..e」は「a, b, c, d, e」を表します。
inclusiveとexclusiveの違い
Rangeにはinclusive(含む)とexclusive(除く)の2種類があります。inclusiveは「..」で表し、終了値を含みます。exclusiveは「...」で表し、終了値を除外します。
1..3 # => 1, 2, 3
1...3 # => 1, 2
インデックスを扱う際に、配列の最後の要素を除外したい場合はexclusiveが便利です。
連続データの生成とインデックス操作
連続データを生成する際にRangeを使うと、コードが短く読みやすくなります。例えば、1から10までの整数を生成し、偶数だけを抽出する例です。
even_numbers = (1..10).select { |n| n.even? }
# => [2, 4, 6, 8, 10]
インデックスを使って配列の要素にアクセスする場合、Rangeをインデックスとして渡すこともできます。
arr = ['a', 'b', 'c', 'd', 'e']
sub = arr[1..3] # => ['b', 'c', 'd']
sub = arr[1...3] # => ['b', 'c']
このようにRangeは連続データの生成とインデックス操作の両方で活躍します。
コメント
コメントを投稿