가장 쉬운 변환 방법은 무엇입니까
[x1, x2, x3, ... , xN]
에
[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]
답변
루비 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] }
답변
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]]
답변
루비 1.9.3에는 체인 가능한 메소드가 있습니다. with_index
체인으로 연결될 수있는 체인 가능한 가 있습니다.
예를 들면 다음과 같습니다.
array.map.with_index { |item, index| ... }
답변
상단 난독 화 :
arr = ('a'..'g').to_a
indexes = arr.each_index.map(&2.method(:+))
arr.zip(indexes)
답변
열거자를 사용하지 않고 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]}