2011-01-04 24 views
5

Olvidé cómo hacer un seguimiento de la posición de los bucles en Ruby. Por lo general escribo en JavaScript, AS3, Java, etc.Cómo realizar un seguimiento de las variables del contador en ruby, block, for, each, do

each:

counter = 0 
Word.each do |word,x| 
    counter += 1 
    #do stuff 
end 

for:

mismo

while:

mismo

block

Word.each {|w,x| } 

De este realmente no tengo conocimiento.

+0

¿Cuál es tu pregunta? No entiendo lo que estás preguntando. –

+0

Ah, sabía que era vago. Cómo hacer un seguimiento de las variables del contador – s84

Respuesta

8

Además del método Array#each_with_index de Ruby 1.8, muchos métodos de enumeración en Ruby 1.9 devuelven un Enumerador cuando se llama sin un bloque; a continuación, puede llamar al método with_index tener el empadronador también pasan a lo largo del índice:

irb(main):001:0> a = *('a'..'g') 
#=> ["a", "b", "c", "d", "e", "f", "g"] 

irb(main):002:0> a.map 
#=> #<Enumerator:0x28bfbc0> 

irb(main):003:0> a.select 
#=> #<Enumerator:0x28cfbe0> 

irb(main):004:0> a.select.with_index{ |c,i| i%2==0 } 
#=> ["a", "c", "e", "g"] 

irb(main):005:0> Hash[ a.map.with_index{ |c,i| [c,i] } ] 
#=> {"a"=>0, "b"=>1, "c"=>2, "d"=>3, "e"=>4, "f"=>5, "g"=>6} 

Si desea map.with_index o select.with_index (o similar) en Rubí 1.8.x, puede hacerlo aburrido-pero- método rápido:

i = 0 
a.select do |c| 
    result = i%2==0 
    i += 1 
    result 
end 

o puede divertirse más funcional:

a.zip((0...a.length).to_a).select do |c,i| 
    i%2 == 0 
end.map{ |c,i| c } 
5

Si usa each_with_index en lugar de each, obtendrá un índice junto con el elemento. Por lo que puede hacer:

Word.each_with_index do |(word,x), counter| 
    #do stuff 
end 

Para while bucles que todavía tendrá que seguir la pista del contador usted mismo.

+0

Sí, esto es lo que busco pero una imagen más grande de todas. – s84

+1

@Sam: No estoy seguro de a qué tipo de imagen más grande te refieres. – sepp2k

+0

jajaja, supongo que no recuerdo. Supongo que lo que quiero decir es que en javascript puedes inicializar el contador en el bucle, pero en Ruby esto no parece intuitivo porque el contador debería estar ahí. ¿no? – s84

3

una capital W significaría que es una constante que muy probablemente significa que sea una clase o un módulo, no una instancia de una clase. Supongo que podrías hacer que una clase devuelva un enumerable usando cada una, pero eso parece muy extraño.

Para eliminar la basura adicional confusa y, posiblemente, el ejemplo con mayúsculas incorrectamente haría que mi código se vea así.

words = get_some_words() 
words.each_with_index do |word, index| 
    puts "word[#{index}] = #{word}" 
end 

No estoy seguro de lo que Sepp2K estaba haciendo con la cosa extraña (palabra, x).

Cuestiones relacionadas