4

重複の可能性:
Scalaのforループが減少していますか?

Scala For The Impatientで作業しているときに、次の演習に出くわしました。

Javaループに相当するScalaを書く
       for(int i = 10; i> = 0; i--)System.out.println(i);

次の解決策を思いつくのにそれほど時間はかかりませんでした。

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

しかし、これは私がこれを行うためのコストについてどのように推論するのか疑問に思いました。逆の方法は、範囲のO(n)トラバーサルを実行しますか、それとも派手なインデックス演算を実行する何かでそれを装飾しますか?これをより良くすることができる他の構造はありますか?

4

1 に答える 1

18

ステップはいつでも選択できます。

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

複雑さについてのあなたの質問によると。逆に使用することもできます。カバーの下に新しい範囲が逆の順序で作成されます(これはO(1)操作です)。

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

それはかなり一定です

于 2012-05-08T13:35:00.433 に答える