49 votes

Commencer une boucle à partir de 1

J'ai récemment eu l'idée effrayante que les Integer.count dans Ruby commencent à partir de 0 et passent à n-1 tout en jouant avec les casse-tête Facebook Engineering. J'ai fait le sale correctif en ajoutant un à la variable de bloc au début afin qu'il commence à un à la place.

Y a-t-il une façon plus jolie?

Exemple:

 10.times do |n|
    n += 1
    puts n
end #=> 012345789

102voto

the Tin Man Points 69148

Ruby prend en charge un certain nombre de méthodes de comptage et de bouclage :

 1.upto(10) do |i|
  puts i
end

>> 1.upto(10) do |i|
 >     puts i
|    end #=> 1
1
2
3
4
5
6
7
8
9
10

Il y a aussi step au lieu de upto qui permet d'incrémenter d'une valeur de pas :

 >> 1.step(10,2) { |i| puts i } #=> 1
1
3
5
7
9

29voto

mu is too short Points 205090

Vous pouvez utiliser une plage :

 (1..10).each { |i| puts i }

Les plages vous donnent un contrôle total sur les index de début et de fin (tant que vous souhaitez passer d'une valeur inférieure à une valeur supérieure).

10voto

Kathy Van Stone Points 10310

Essayer

 (1..10).each do |i|
 #  ... i goes from 1 to 10
end

au lieu. Il est également plus facile à lire lorsque la valeur de i compte.

4voto

Ryo Points 1243

Vieux, mais c'est peut-être quelque chose que quelqu'un recherche...

 5.times.with_index(100){|i, idx| p i, idx};nil
#=>
    0
    100
    1
    101
    2
    102
    3
    103
    4
    104

2voto

Parnab Sanyal Points 442

Il y a bien sûr la boucle while

 i = 1
while i<=10 do
  print "#{i} "
  i += 1
end
# Outputs: 1 2 3 4 5 6 7 8 9 10

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X