スキップしてメイン コンテンツに移動

Ruby範囲でインデックス操作

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は連続データの生成とインデックス操作の両方で活躍します。

この記事はAIによって作成されました。

コメント