为了账号安全,请及时绑定邮箱和手机立即绑定

如何快速反向循环迭代?

如何快速反向循环迭代?

iOS
largeQ 2019-10-16 14:26:22
当我在Playground中使用for循环时,一切正常,直到将for循环的第一个参数更改为最大值。(以降序排列)这是错误吗?还有其他人吗?for index in 510..509{    var a = 10}显示将要执行的迭代次数的计数器一直在计时...
查看完整描述

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

}


查看完整回答
反对 回复 2019-10-16
  • 3 回答
  • 0 关注
  • 641 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信