Syntaxe d'une boucle for en ruby


Réponses:


118
array.each do |element|
  element.do_stuff
end

ou

for element in array do
  element.do_stuff
end

Si vous avez besoin d'index, vous pouvez utiliser ceci:

array.each_with_index do |element,index|
  element.do_stuff(index)
end

15
Je cherchais spécifiquement l'indexation en boucle, aucune de ces solutions ne rend immédiatement évident comment faire cela. l'op a trahi ses intentions avec array.length dans le code ...
jheriko

6
Lisez attentivement ma réponse. Il existe une solution de bouclage avec indexation incluse.
Eimantas

8
Souvent, eachc'est génial. Mais parfois, je veux juste une putain de boucle for traditionnelle. Parfois, la "méthode Ruby" peut être tout simplement ennuyeuse.
Ruben Martinez Jr.

1
comment définir manuellement l'index en rubis pour pouvoir écrire un tri moi
Muhammad Umer

6
et si je veux sauter les deux prochaines itérations
Muhammad Umer

77
limit = array.length;
for counter in 0..limit
 --- make some actions ---
end

l'autre façon de faire est la suivante

3.times do |n|
  puts n;
end

cela affichera 0, 1, 2, donc pourrait être utilisé comme un itérateur de tableau aussi

Pensez que cette variante correspond mieux aux besoins de l'auteur


29

Je continue à frapper ceci comme un lien principal pour google "ruby for loop", donc je voulais ajouter une solution pour les boucles où l'étape n'était pas simplement "1". Dans ces cas, vous pouvez utiliser la méthode «step» qui existe sur les objets Numerics et Date. Je pense que c'est une approximation proche pour une boucle «pour».

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

20

L'équivalence serait

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

17
array.each_index do |i|
  ...
end

Ce n'est pas très rubis, mais c'est le meilleur moyen de faire la boucle for à partir d'une question en Ruby


C'est génial. Il est vrai que la réponse n'est pas eachmais plutôt each_index. +1
Dan Rosenstark

12

Pour itérer une boucle un nombre fixe de fois, essayez:

n.times do
  #Something to be done n times
end

10

Si vous n'avez pas besoin d'accéder à votre tableau , (juste une simple boucle for), vous pouvez utiliser upto ou each:

Jusqu'à:

1.9.3p392 :030 > 2.upto(4) {|i| puts i}
2
3
4
 => 2 

Chaque:

1.9.3p392 :031 > (2..4).each {|i| puts i}
2
3
4
 => 2..4 

8

Quelle? Depuis 2010 et personne n'a mentionné que Ruby avait une boucle fine for / in (c'est juste que personne ne l'utilise):

ar = [1,2,3,4,5,6]
for item in ar
  puts item
end

5
Un avantage de .each ... do est que le bloc temporaire tombe hors de portée à la fin de la boucle, tandis que for ... in laisse le bloc temporaire dans la portée.
Wayne Conrad

4
['foo', 'bar', 'baz'].each_with_index {|j, i| puts "#{i} #{j}"}

0

La syntaxe de la boucle d'énumération de Ruby est différente:

collection.each do |item|
...
end

Cela se lit comme "un appel à la méthode 'each' de l'instance d'objet tableau 'collection' qui prend un bloc avec 'blockargument' comme argument". La syntaxe de bloc dans Ruby est 'do ... end' ou '{...}' pour les instructions sur une seule ligne.

L'argument de bloc '| item |' est facultatif mais s'il est fourni, le premier argument représente automatiquement l'élément énuméré en boucle.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.