2012-05-08 64 views
3

可能重複:
Decreasing for loop in Scala?倒計時Scala的for循環

同時通過Scala For The Impatient工作,我來到了以下演習:

 
Write a Scala equivalent for the Java loop 
     for (int i = 10; i >= 0; i--) System.out.println(i); 

它沒有采取我很想拿出以下解決方案:

for (i <- 1 to 10 reverse) { 
     println(i) 
    } 

但是,這讓我想知道如何推斷這樣做的成本。反向方法是否對範圍進行O(n)遍歷,還是用一些確實有趣的索引算術來裝飾它?還有其他的結構可以做得更好嗎?

回答

17

你總是可以選擇步:

for (i <- 10 to 1 by -1) { 
     println(i) 
} 

根據你對複雜的問題。您可以使用逆轉過,原因掩護下新的範圍will be created以相反的順序(它的O(1)操作):

final override def reverse: Range = 
    if (length > 0) new Range.Inclusive(last, start, -step) 
    else this 

這是相當恆定的

+4

應該是「10比1 -1」。我個人喜歡「(10到1 by -1)foreach println」更好 –

+0

@ GerdRiesselmann是的,謝謝你的更正 –

+0

我試過這個使用'by -1'而不是'reverse',它不產生任何輸出,我把它意味着它迭代零次。我不知道我會做錯什麼。 – pohl