Quiero usar un para cada uno y un contador:
i=0
for blah in blahs
puts i.to_s + " " + blah
i+=1
end
Hay una mejor manera de hacerlo?
Nota: No sé si blahs
es una matriz o un hash, pero tener que hacerlo blahs[i]
no lo haría mucho más sexy. También me gustaría saber cómo escribir i++
en Ruby.
Técnicamente, la respuesta de Matt y Squeegy llegó primero, pero estoy dando la mejor respuesta a paradoja, así que difunde un poco los puntos en SO. También su respuesta tenía la nota sobre las versiones, que todavía es relevante (siempre que mi Ubuntu 8.04 esté usando Ruby 1.8.6).
Debería haber usado, puts "#{i} #{blah}"
que es mucho más sucinto.
Respuestas:
Como la gente ha dicho, puedes usar
pero si desea índices con un iterador diferente a "cada" (por ejemplo, si desea mapear con un índice o algo así) puede concatenar enumeradores con el método each_with_index, o simplemente usar with_index:
Esto es algo que puedes hacer desde Ruby 1.8.7 y 1.9.
fuente
No puedes hacer esto con para. Generalmente me gusta la llamada más declarativa a cada uno personalmente de todos modos. En parte porque es fácil pasar a otras formas cuando alcanzas el límite de la sintaxis for.
fuente
Sí, es
collection.each
hacer bucles y luegoeach_with_index
obtener el índice.Probablemente deberías leer un libro de Ruby porque es Ruby fundamental y, si no lo sabes, tendrás grandes problemas (prueba: http://poignantguide.net/ruby/ ).
Tomado del código fuente de Ruby:
fuente
Si no tiene la nueva versión de
each_with_index
, puede usar elzip
método para emparejar índices con elementos:que produce:
fuente
'%s %s' % [1, "two"]
en los documentos de Ruby? Gracias por su ayuda y por conservar el espacio vertical utilizando una línea para comprimir y mapear.En cuanto a tu pregunta sobre cómo hacerlo
i++
, bueno, no puedes hacerlo en Ruby. Lai += 1
declaración que tenía es exactamente cómo se supone que debe hacerlo.fuente
La enumeración de series enumerables es bastante agradable.
fuente
Si
blahs
es una clase que se mezcla en Enumerable, debería poder hacer esto:fuente
Si desea obtener un índice de rubí para cada uno, puede usar
Aquí hay un ejemplo para mostrar cómo
.each_with_index
funciona:Esto imprimirá:
fuente