¿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]]
Si usa Ruby 1.8.7 o 1.9, puede usar el hecho de que los métodos iteradores como each_with_index
, cuando se llama 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] }
.each_with_index.map
?map
es un método deEnumerable
como siempre.each_with_index
, Cuando se le llama sin un bloque, devuelve unEnumerator
objeto (en 1.8.7+), que mezcla enEnumerable
, por lo que se puede llamarmap
,select
,reject
etc., en que al igual que en una matriz, hachís, etc. variararr.map.with_index{ |o,i| [o,i+2] }
map.with_index
no funciona en 1.8.7 (map
devuelve una matriz cuando se llama sin un bloque en 1.8).Ruby tiene Enumerator # with_index (offset = 0) , así que primero convierta la matriz en un enumerador usando Object # to_enum o Array # map :
fuente
foo = ['d'] * 5; foo.map!.with_index { |x,i| x * i }; foo #=> ["", "d", "dd", "ddd", "dddd"]
En ruby 1.9.3 hay un método encadenable llamado
with_index
que se puede encadenar al mapa.Por ejemplo:
fuente
Sobre la ofuscación superior:
fuente
Aquí hay dos opciones más para 1.8.6 (o 1.9) sin usar el enumerador:
fuente
Siempre me ha gustado la sintaxis de este estilo:
Invocar
each_with_index
le proporciona un enumerador que puede asignar fácilmente con su índice disponible.fuente
Una forma divertida pero inútil de hacer esto:
fuente
A fun, but useless way
.+2
es crear la salida que pide el OPfuente
fuente
map.with_index
Ya existe en rubí. ¿Por qué sugerir reabrir la clase enumerable y agregar algo que ya existe?each_with_index.map
etc. e incluso aquellos de nosotros en versiones más nuevas podrían preferir tener que usar map.with_index FWIW :)A menudo hago esto:
En lugar de iterar directamente sobre los elementos de la matriz, está iterando sobre un rango de enteros y usándolos como índices para recuperar los elementos de la matriz.
fuente