2012-03-05 10 views

答えて

25

使用とdowntoは、のように:他の人が指摘したように

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

なぜそうではない"for(n in 100..1)"?最初の数字が大きいと範囲が後ろになるという合意はできませんか? – x2bool

1

あなたがにリンクされている正確なページを見れば、その希望reversed機能について提案があります

のような何かを行うことが可能ですfor (n in (1..100).reversed())をやってみましょうが、まだ実装されていないようです。 ..演算子は常にカウントアップします。

+0

私はそのコメントを見て、それが古くなったと思った。 – jjnguy

+0

@jjnguyうん...おそらくそうです。コミット '86a33f8'(Jan 18 2012)は、同じ意味を持つ' for(n in 100-downto 1) 'と' for(n in - (1..100)) 'のテストを追加します。彼らはあなたのために働くのですか? – hobbs

+3

- (1..100)は動作しなくなりました。正しい構文は(n in 100 downTo 1) –

6

逆さまの範囲は、の単項演算子を使用して-(1..100)のようにサポートされます。

その範囲のメソッドを呼び出すには、(-(1..100)).foreach { println(it) }のようにカッコで囲む必要があります。

+4

rangeTo()関数を少しスマートにして自動的に処理する可能性はありますか?マイナスの範囲は-1から-100までカウントすることを意味します。 – jjnguy

+0

コトリンの範囲に関する次の問題を見て、あなたの提案を詳しく説明する新しい問題を提出することをお勧めします: [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

、正解は

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

である。しかし、なぜKotlinチームは100..1100 downTo 1を選んだのですか?

リテラルの代わりに変数を使用しようとすると、構文100..1が悪いと思います。私たちは、その後

for (n in b..a)

を入力した場合 我々が使用していたものをループ明確ではないでしょう。

逆算することを意図している可能性がありますが、baより小さくなると、プログラムは実際には上向きにカウントされます。それはバグの原因になるでしょう。

関連する問題