¿Cómo mapear/recopilar con índice en Ruby?
¿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]]
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 Enumerator
objeto, al que puede llamar Enumerable
métodos como map
on. 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] }
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]]