2012-01-19 10 views
34

Sono nuovo con rubino. desidero sapere come scrivere il seguente ciclo in ruby.Come scrivere un ciclo negativo in ruby ​​come per (i = indice; i> = 0; i -)

var index=25; 

for (i = index; i >= 0; i--) { 
    print i; 
} 
+0

nota che la tua domanda dovrebbe leggere 'for (i = indice; i > = 0; i -) ' – KevinDTimm

+5

Se sei nuovo con ruby, perché il tuo profilo dice che hai 5 anni di esperienza in RoR? –

+0

Sì mark :), ero uno sviluppatore di php prima di –

risposta

9

Prova questo:

25.downto(0) { |i| puts i } 
24

Un modo:

25.downto(0) do |i| 
    puts i 
end 
+0

Immagino che hai capito che le gamme possono essere usato in questo modo ;-) –

+0

Questa era la risposta di qualcun altro, da quando è stato cancellato. Non mi sarebbe venuto in mente di usare un intervallo quando questo è esattamente ciò che è "downto". –

+0

Scusaci per quello allora. Sono stato divertito dalla risposta, ma non ricordo il nome :-) –

49

Ci sono molti modi per eseguire un ciclo di decremento in Ruby:

Primo modo:

for i in (10).downto(0) 
    puts i 
end 

Secondo modo:

(10).downto(0) do |i| 
    puts i 
end 

Terzo modo:

i=10; 
until i<0 
    puts i 
    i-=1 
end 
+3

La prima via contiene parenti estranei e non è molto idiomatica. La 2a strada contiene anche parenti estranei, ha un "ogni" non necessario e ha citazioni non necessarie e interpolazione variabile. La 3a via è semplicemente rotta. –

+0

@MarkThomas: Penso che le parentesi estranee facciano sembrare meno complicato ai nuovi utenti di Ruby, come me. In Javascript, la stessa cosa è possibile, ma è necessario utilizzare due punti (il punto di radix e la proprietà accessor): '65536..toExponential()'. È un modo un po 'imbarazzante per consentire l'accesso alla proprietà, quindi immagino che non sia molto comune usarlo o addirittura conoscerlo in altre lingue dove è possibile accedere direttamente alle proprietà di un numero usando un punto. –

12

downto va bene, ma c'è anche il più generico step.

25.step(0, -1){|i| puts i} 
1

Solo nel caso in cui si sta lavorando con una gamma già:

rng = 0..6 
rng.reverse_each { |i| p i } 
2

Ecco uno più semplice:

(0..25).reverse_each { |i| print i } 
+0

Non funziona, gli intervalli non vanno giù. – steenslag

+0

@steenslag Sembra che tu abbia ragione. Fissaggio. – edgerunner

Problemi correlati