variable operator objects for example ruby syntax

operator - Contador automático en Ruby para cada uno?



ruby>= (8)

Como han dicho las personas, puedes usar

each_with_index

pero si desea índices con un iterador diferente a "cada uno" (por ejemplo, si desea asignar un índice o algo así) puede concatenar enumeradores con el método each_with_index, o simplemente usar with_index:

blahs.each_with_index.map { |blah, index| something(blah, index)} blahs.map.with_index { |blah, index| something(blah, index) }

Esto es algo que puedes hacer desde ruby ​​1.8.7 y 1.9.

Quiero usar un for-each 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 hacer 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 fue la primera, pero estoy dando la mejor respuesta a paradoja, por lo que me extendí un poco por los puntos. También su respuesta tenía la nota sobre las versiones, que sigue siendo 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 conciso.


En cuanto a tu pregunta sobre hacer i++ , bueno, no puedes hacer eso en Ruby. La afirmación de i += 1 que tienes es exactamente cómo se supone que debes hacerlo.



Sí, es collection.each para hacer bucles, y cada each_with_index para obtener el índice.

Probablemente deberías leer un libro de Ruby porque es fundamental Ruby y si no lo sabes, vas a tener un gran problema (prueba: http://poignantguide.net/ruby/ ).

Tomado del código fuente de Ruby:

hash = Hash.new %w(cat dog wombat).each_with_index {|item, index| hash[item] = index } hash #=> {"cat"=>0, "wombat"=>2, "dog"=>1}


Si blahs es una clase que se mezcla en Enumerable, deberías poder hacer esto:

blahs.each_with_index do |blah, i| puts("#{i} #{blah}") end


Si desea obtener un índice de rubí para cada uno, puede usar

.each_with_index

Aquí hay un ejemplo para mostrar cómo funciona .each_with_index :

range = (''a''..''z'').to_a length = range.length - 1 range.each_with_index do |letter, index| print letter + " " if index == length puts "You are at last item" end end

Esto se imprimirá:

a b c d e f g h i j k l m n o p q r s t u v w x y z You are at last item


Si no tiene la nueva versión de each_with_index , puede usar el método zip para emparejar índices con elementos:

blahs = %w{one two three four five} puts (1..blahs.length).zip(blahs).map{|pair|''%s %s'' % pair}

que produce:

1 one 2 two 3 three 4 four 5 five


[:a, :b, :c].each_with_index do |item, i| puts "index: #{i}, item: #{item}" end

No puedes hacer esto con. Por lo general, me gusta la llamada más declarativa a cada persona de todos modos. En parte porque es fácil pasar a otras formas cuando alcanza el límite de la sintaxis for.