답변:
루비 1.8.7 또는 1.9를 사용하는 each_with_index
경우 블록없이 호출하면 Enumerator
객체 Enumerable
와 같은 메소드 를 호출 할 수있는 반복자 메소드 를 사용할 수 있습니다 map
. 그래서 당신은 할 수 있습니다 :
arr.each_with_index.map { |x,i| [x, i+2] }
1.8.6에서는 다음을 수행 할 수 있습니다.
require 'enumerator'
arr.enum_for(:each_with_index).map { |x,i| [x, i+2] }
map
방법입니다 Enumerable
. each_with_index
, 블록없이 호출 되면 , Enumerator
믹싱 되는 객체 (1.8.7+)를 반환 Enumerable
하므로 배열, 해시, 범위 등에서처럼 , 등을 호출 할 수 있습니다 .map
select
reject
arr.map.with_index{ |o,i| [o,i+2] }
map.with_index
1.8.7에서 작동하지 않습니다 ( map
1.8에서 블록없이 호출되면 배열을 반환합니다).
Ruby에는 Enumerator # with_index (offset = 0) 이 있으므로 먼저 Object # to_enum 또는 Array # map을 사용하여 배열을 열거 자로 변환하십시오 .
[:a, :b, :c].map.with_index(2).to_a
#=> [[:a, 2], [:b, 3], [:c, 4]]
foo = ['d'] * 5; foo.map!.with_index { |x,i| x * i }; foo #=> ["", "d", "dd", "ddd", "dddd"]
열거자를 사용하지 않고 1.8.6 (또는 1.9)에 대한 두 가지 추가 옵션이 있습니다.
# Fun with functional
arr = ('a'..'g').to_a
arr.zip( (2..(arr.length+2)).to_a )
#=> [["a", 2], ["b", 3], ["c", 4], ["d", 5], ["e", 6], ["f", 7], ["g", 8]]
# The simplest
n = 1
arr.map{ |c| [c, n+=1 ] }
#=> [["a", 2], ["b", 3], ["c", 4], ["d", 5], ["e", 6], ["f", 7], ["g", 8]]
나는 항상이 스타일의 문법을 즐겼다 :
a = [1, 2, 3, 4]
a.each_with_index.map { |el, index| el + index }
# => [1, 3, 5, 7]
호출하면 each_with_index
사용 가능한 색인으로 쉽게 맵핑 할 수있는 열거자를 얻을 수 있습니다.
이것을하는 재미 있지만 쓸모없는 방법 :
az = ('a'..'z').to_a
azz = az.map{|e| [e, az.index(e)+2]}
A fun, but useless way
. +2
OP가 요구하는 결과를 만드는 것입니다
a = [1, 2, 3]
p [a, (2...a.size+2).to_a].transpose
module Enumerable
def map_with_index(&block)
i = 0
self.map { |val|
val = block.call(val, i)
i += 1
val
}
end
end
["foo", "bar"].map_with_index {|item, index| [item, index] } => [["foo", 0], ["bar", 1]]
map.with_index
루비에 이미 존재합니다. 열거 가능한 클래스를 다시 열고 이미 존재하는 것을 추가하는 것이 좋습니다.
each_with_index.map
등 을 사용하는 대신 1.8.6 및 1.8.7 (우리 중 일부는 여전히 그것을 사용합니다)하는 것이 더 쉬운 방법 일 수 있으며 최신 버전의 사람들도 사용하는 것을 선호 할 수 있습니다 map.with_index FWIW :)
나는 종종 이것을한다 :
arr = ["a", "b", "c"]
(0...arr.length).map do |int|
[arr[int], int + 2]
end
#=> [["a", 2], ["b", 3], ["c", 4]]
배열의 요소를 직접 반복하는 대신 정수 범위를 반복하여 배열의 요소를 검색하는 인덱스로 사용합니다.
.each_with_index.map
시겠습니까?