¿Cómo mapear/recopilar con índice en Ruby?

Resuelto Misha Moroshko asked hace 13 años • 10 respuestas

¿Cuál es la forma más fácil de convertir?

[x1, x2, x3, ... , xN]

a

[[x1, 2], [x2, 3], [x3, 4], ... , [xN, N+1]]
Misha Moroshko avatar Jan 15 '11 08:01 Misha Moroshko
Aceptado

Si está usando Ruby 1.8.7 o 1.9, puede aprovechar el hecho de que los métodos iteradores como each_with_index, cuando se llaman sin un bloque, devuelven un Enumeratorobjeto, al que puede llamar Enumerablemétodos como mapon. Entonces puedes hacer:

arr.each_with_index.map { |x,i| [x, i+2] }

En 1.8.6 puedes hacer:

require 'enumerator'
arr.enum_for(:each_with_index).map { |x,i| [x, i+2] }
sepp2k avatar Jan 15 '2011 01:01 sepp2k

Ruby tiene Enumerator#with_index(offset = 0) , así que primero convierta la matriz en un enumerador usando Object#to_enum o Array#map :

[:a, :b, :c].map.with_index(2).to_a
#=> [[:a, 2], [:b, 3], [:c, 4]]
tokland avatar Jul 01 '2012 09:07 tokland