3 回答
TA贡献1842条经验 获得超12个赞
将反向函数应用于范围以向后迭代:
对于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 关注
- 641 浏览
添加回答
举报