Rubyのソースコードでたまに見かける1..10といった記述を利用すると、指定した回数だけ同じ処理を繰り返し実行することができます。

この記述をeachと組み合わせてみて、ループ処理を書いてみましょう。

{開始時の数字}..{終了時の数字}という形でドット二つでつないで書きます。

実際にやってみると以下のようになります。以下の場合は10回putsが実行されます。

puts iとしていますが、iには現在の数字が格納されています。1,2,3,4,5…と受け取ることができるのでそれをそのままputsで表示している感じですね。

irb(main):001:0> (1..10).each { |i| puts i }
1
2
3
4
5
6
7
8
9
10
=> 1..10

ちなみにドットを三つにして1...10とすると最後の数字は含まれなくなります。

1 <= i < 10ということですね。以下のように1から9まで出力されます。

irb(main):001:0> (1...10).each { |i| puts i }
1
2
3
4
5
6
7
8
9
=> 1...10

1..10の数字の部分は変数に置き換えることもできます。

以下の例ではnに3を格納して3回繰り返しをしています。

irb(main):001:0> n = 3
=> 3
irb(main):001:0> (1..n).each { |i| puts i }
1
2
3
=> 1..3

eachの他にもmapなんかでもよく使いますね。

むしろ、mapの方がよく使うかもしれないです。

以下の場合、1から3までの数字を配列として取得できることになります。

mapだけだとEnumeratorというインスタンスになるだけなので、そこからto_aメソッドで配列に変換しています。

irb(main):009:0> (1..3).map.to_a
=> [1, 2, 3]

この記事の環境情報

  • Ruby 3.1.2
  • 海外出張が突如取りやめになった