3 回答

TA貢獻1842條經驗 獲得超13個贊
將反向函數應用于范圍以向后迭代:
對于Swift 1.2及更早版本:
// Print 10 through 1
for i in reverse(1...10) {
println(i)
}
它也適用于半開范圍:
// Print 9 through 1
for i in reverse(1..<10) {
println(i)
}
注意: reverse(1...10)創建一個type數組[Int],因此這對于較小的范圍可能很好,但是lazy如下所示使用是明智的選擇;stride如果范圍較大,則考慮接受可接受的答案。
為避免創建大數組,請lazy與一起使用reverse()。以下測試在Playground中有效運行,表明它沒有創建1萬億Int秒的數組!
測試:
var count = 0
for i in lazy(1...1_000_000_000_000).reverse() {
if ++count > 5 {
break
}
println(i)
}
對于Xcode 7中的Swift 2.0:
for i in (1...10).reverse() {
print(i)
}
請注意,在Swift 2.0中,(1...1_000_000_000_000).reverse()類型為ReverseRandomAccessCollection<(Range<Int>)>,因此可以正常工作:
var count = 0
for i in (1...1_000_000_000_000).reverse() {
count += 1
if count > 5 {
break
}
print(i)
}
對于Swift 3.0 reverse(),已重命名為reversed():
for i in (1...10).reversed() {
print(i) // prints 10 through 1
}
- 3 回答
- 0 關注
- 681 瀏覽
添加回答
舉報