2012-05-08 14 views
3

可能性の重複:Scala For The Impatientを通じて作業中
Decreasing for loop in Scala?は、forループScalaでダウンカウント

が、私は次の演習に出くわしました:

 
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) 
    } 

しかし、これにより、これを行うコストについての理由をどのように判断するのか不思議です。 reverseメソッドはRangeのO(n)トラバーサルを行いますか?または、それを空想インデックス演算を行う何かで装飾しますか?これをより良くすることができる他の構造がありますか?複雑さについてのご質問によると

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

答えて

17

あなたは、常にステップを選択することができます。あなたは、あまりにも逆の順序(それのO(1)操作)でカバー新しい範囲will be created下の原因を逆に使用することができます。

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

+4

は「によって-1 10 1」である必要があり、かなり一定であること。私は個人的に "(10 -1 by -1)foreach println"を好きです。 –

+0

@GerdRiesselmannはい、訂正ありがとうございます –

+0

私は 'reverse'の代わりに' by -1'を使用してこれを試しました。それが0回反復することを意味します。私は何が間違っているのだろうかと思います。 – pohl

関連する問題