TaKesso's Tech Blog

Web中心の技術メモ

Ruby: Enumeratorクラス

REx - Ruby Examination で解いた問題の解説を自分なりにまとめ直すシリーズです。

問題

実行したらどうなるか

(10..15).to_a.map.with_index(1) do |elem, i|
  puts i
end

解答

正解は
1
2
3
4
5
6
です

解説

Enumerator#with_index

  • with_index(offset = 0) {|(*args), idx| ... } -> object
  • 生成時のパラメータに従って、要素にインデックスを添えて繰り返します。
  • インデックスは offset から始まります

引用: instance method Enumerator#with_index (Ruby 2.1.0)

似てる Enumerable#each_with_index

  • offset 引数を受け取らない

実行して確かめる

p "------------------"
p (10..15).to_a

p "------------------"
(10..15).to_a.map do |elem|
  p elem
end

p "------------------"
(10..15).to_a.map.with_index do |elem, i|
  p [elem, i]
end

p "------------------"
(10..15).to_a.map.with_index(1) do |elem, i|
  p [elem, i]
end

p "------------------"
(10..15).to_a.map.each_with_index do |elem, i|
  p [elem, i]
end
"------------------"
[10, 11, 12, 13, 14, 15]
"------------------"
10
11
12
13
14
15
"------------------"
[10, 0]
[11, 1]
[12, 2]
[13, 3]
[14, 4]
[15, 5]
"------------------"
[10, 1]
[11, 2]
[12, 3]
[13, 4]
[14, 5]
[15, 6]
"------------------"
[10, 0]
[11, 1]
[12, 2]
[13, 3]
[14, 4]
[15, 5]