2012-03-05 14 views

risposta

25

Usa DOWNTO come in:

for (n in 100 downTo 1) { 
// 
} 
+5

Perché non è "for (n in 100..1)"? Non potrebbe essere un accordo che se il primo numero è più grande allora un range conta all'indietro? – x2bool

1

Se guardate la pagina esatta si è collegato al, c'è un suggerimento per una funzione reversed che avrebbe ti faccio fare for (n in (1..100).reversed()) ma non sembra essere ancora implementato. L'operatore .. conta sempre.

+0

Ho visto quel commento e speravo che non fosse aggiornato. – jjnguy

+0

@jjnguy hmm ... forse lo è. Commit '86a33f8' (18 gennaio 2012) aggiunge test per' for (n in 100 downto 1) 'e' for (n in - (1..100)) 'entrambi aventi lo stesso significato. Lavorano per te? – hobbs

+3

- (1..100) non funziona più. La sintassi corretta è per (n in 100 downTo 1) –

6

Gli intervalli inversi sono supportati utilizzando l'operatore unario meno - come in -(1..100).

Per richiamare un metodo su tale intervallo, sarà necessario circondarlo con parentesi come in (-(1..100)).foreach { println(it) }.

+4

Esiste la possibilità di rendere la funzione rangeTo() un po 'più intelligente e gestibile automaticamente? Avere un intervallo negativo per me significa contare da -1 a -100. – jjnguy

+0

Ti suggerisco di dare un'occhiata ai seguenti problemi relativi agli intervalli in Kotlin e di inviare un nuovo problema spiegando in dettaglio il tuo suggerimento: [KT-861] (http://youtrack.jetbrains.com/issue/KT-861) , [KT-1045] (http://youtrack.jetbrains.com/issue/KT-1045), [KT-1076] (http://youtrack.jetbrains.com/issue/KT-1076) –

2

Come sottolineato da altri, la risposta corretta è

for (n in 100 downTo 1) { 
    println(n) 
} 

Ma perché squadra Kotlin scelto 100 downTo 1 vs 100..1?

Penso che la sintassi 100..1 sia negativa quando si tenta di utilizzare variabili anziché valori letterali. Se abbiamo digitato

for (n in b..a)

allora non sarebbe chiaro quale ciclo abbiamo voluto utilizzare.

Potremmo avere intenzione di contare all'indietro, ma se b risulta essere inferiore a a, il nostro programma conta effettivamente verso l'alto! Questa sarebbe una fonte di bug.

Problemi correlati