亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何快速反向循環迭代?

如何快速反向循環迭代?

iOS
largeQ 2019-10-16 14:26:22
當我在Playground中使用for循環時,一切正常,直到將for循環的第一個參數更改為最大值。(以降序排列)這是錯誤嗎?還有其他人嗎?for index in 510..509{    var a = 10}顯示將要執行的迭代次數的計數器一直在計時...
查看完整描述

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

}


查看完整回答
反對 回復 2019-10-16
  • 3 回答
  • 0 關注
  • 681 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號