Como faço esse tipo de loop for em Ruby?
for(int i=0; i<array.length; i++) {
}
Como faço esse tipo de loop for em Ruby?
for(int i=0; i<array.length; i++) {
}
Respostas:
array.each do |element|
element.do_stuff
end
ou
for element in array do
element.do_stuff
end
Se precisar de índice, você pode usar este:
array.each_with_index do |element,index|
element.do_stuff(index)
end
each
é ótimo. Mas às vezes eu só quero um loop for tradicional maldito. Às vezes, o "jeito Ruby" pode ser simplesmente irritante.
Eu continuo acertando isso como um link principal para o google "ruby for loop", então eu queria adicionar uma solução para loops onde a etapa não fosse simplesmente '1'. Para esses casos, você pode usar o método 'step' existente nos objetos Numerics e Date. Eu acho que esta é uma aproximação próxima para um loop 'for'.
start = Date.new(2013,06,30)
stop = Date.new(2011,06,30)
# step back in time over two years, one week at a time
start.step(stop, -7).each do |d|
puts d
end
array.each_index do |i|
...
end
Não é muito Ruby, mas é a melhor maneira de fazer o loop for de question em Ruby
each
mas sim each_index
. +1
Se você não precisa acessar seu array , (apenas um simples loop for), você pode usar até ou cada:
Até:
1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
=> 2
Cada:
1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
=> 2..4
O que? De 2010 e ninguém mencionou Ruby tem um loop for / in (apenas ninguém o usa):
ar = [1,2,3,4,5,6]
for item in ar
puts item
end
A sintaxe do loop de enumeração de Ruby é diferente:
collection.each do |item|
...
end
Isso é lido como "uma chamada para o método 'each' da instância do objeto array 'collection' que recebe bloco com 'blockargument' como argumento". A sintaxe de bloco em Ruby é 'do ... end' ou '{...}' para instruções de uma única linha.
O argumento do bloco '| item |' é opcional, mas se fornecido, o primeiro argumento representa automaticamente o item enumerado em loop.