Eu estava procurando especificamente por indexação em um loop, nenhuma dessas soluções torna imediatamente óbvio como fazer isso. o op traiu suas intenções com array.length no código ...
jheriko
6
Leia minha resposta com atenção. Existe uma solução de loop com indexação incluída.
Eimantas
8
Muitas vezes, eaché ótimo. Mas às vezes eu só quero um loop for tradicional maldito. Às vezes, o "jeito Ruby" pode ser simplesmente irritante.
Ruben Martinez Jr.
1
como faço para definir manualmente o índice em ruby para que eu possa escrever um tipo sozinho
Muhammad Umer
6
e se eu quiser pular as próximas duas iterações
Muhammad Umer
77
limit = array.length;
for counter in0..limit
--- make some actions ---
end
a outra maneira de fazer isso é a seguinte
3.times do|n|
puts n;
end
isso imprimirá 0, 1, 2, então também pode ser usado como um iterador
Acho que essa variante se ajusta melhor às necessidades do autor
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
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.
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
fonte
each
é ótimo. Mas às vezes eu só quero um loop for tradicional maldito. Às vezes, o "jeito Ruby" pode ser simplesmente irritante.limit = array.length; for counter in 0..limit --- make some actions --- end
a outra maneira de fazer isso é a seguinte
3.times do |n| puts n; end
isso imprimirá 0, 1, 2, então também pode ser usado como um iterador
Acho que essa variante se ajusta melhor às necessidades do autor
fonte
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
fonte
A equivalência seria
for i in (0...array.size) end
ou
(0...array.size).each do |i| end
ou
i = 0 while i < array.size do array[i] i = i + 1 # where you may freely set i to any value end
fonte
array.each_index do |i| ... end
Não é muito Ruby, mas é a melhor maneira de fazer o loop for de question em Ruby
fonte
each
mas simeach_index
. +1Para iterar um loop um número fixo de vezes, tente:
n.times do #Something to be done n times end
fonte
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
fonte
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
fonte
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}
fonte
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.
fonte