[ruby] 루비에서 인덱스로 매핑하는 방법?

가장 쉬운 변환 방법은 무엇입니까

[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]}