Swift で逆範囲を操作する方法はありますか?
例えば:
for i in 5...1 {
// do something
}
無限ループです。
Swift の新しいバージョンでは、そのコードはコンパイルされますが、実行時にエラーが発生します。
致命的なエラー: upperBound < lowerBound の範囲を形成できません
1..5
代わりに、計算しj = 6 - i
てj
インデックスとして使用できることはわかっています。もっと読みやすいものがあるかどうか疑問に思いました。
ベストアンサー1
最新の Swift 3 にアップデート (Swift 4 でも動作します)
reversed()
このメソッドは範囲に対して使用できます
for i in (1...5).reversed() { print(i) } // 5 4 3 2 1
またはstride(from:through:by:)
方法
for i in stride(from:5,through:1,by:-1) { print(i) } // 5 4 3 2 1
stride(from:to:by:)
類似しているが最後の値は除外される
for i in stride(from:5,to:0,by:-1) { print(i) } // 5 4 3 2 1
最新のSwift 2にアップデート
まず、プロトコル拡張により、reverse
の使用方法が変わります。
for i in (1...5).reverse() { print(i) } // 5 4 3 2 1
Stride は Xcode 7 Beta 6 で改良されました。新しい使用法は次のとおりです。
for i in 0.stride(to: -8, by: -2) { print(i) } // 0 -2 -4 -6
for i in 0.stride(through: -8, by: -2) { print(i) } // 0 -2 -4 -6 -8
以下の場合にも機能しますDoubles
:
for i in 0.5.stride(to:-0.1, by: -0.1) { print(i) }
ここで境界については浮動小数点の比較に注意してください。
Swift 1.2 の以前の編集: Xcode 6 Beta 4以降、によるそして逆範囲もう存在しません:[
範囲を反転したいだけの場合は、逆行する必要なのは機能だけです:
for i in reverse(1...5) { println(i) } // prints 5,4,3,2,1
投稿者:0x7fffffff新しいストライド任意の整数で反復および増分するために使用できる構造。Apple は浮動小数点のサポートも予定していると述べています。
彼の回答から引用:
for x in stride(from: 0, through: -8, by: -2) {
println(x) // 0, -2, -4, -6, -8
}
for x in stride(from: 6, to: -2, by: -4) {
println(x) // 6, 2
}