for j in (arr.count-1) ..< 0{
self.swap(arr: &arr, a: 0, b: j)//將堆頂元素與末尾元素進(jìn)行交換
self.adjustHeap(arr: &arr, i: 0, length: j)//重新對堆進(jìn)行調(diào)整
}
這段代碼中程序崩潰
看了許多關(guān)于Swift for循環(huán)的文章类嗤,發(fā)現(xiàn)基本上都是正序的for循環(huán)糊肠,對于逆序上述寫法是錯(cuò)誤的,直到我發(fā)現(xiàn)了這個(gè)方法遗锣。货裹。。
for j in (0 ..< (arr.count-1)).reversed(){
self.swap(arr: &arr, a: 0, b: j)//將堆頂元素與末尾元素進(jìn)行交換
self.adjustHeap(arr: &arr, i: 0, length: j)//重新對堆進(jìn)行調(diào)整
}
用這個(gè)就可以倒序for循環(huán)了
還有另一種比較優(yōu)雅而且裝X的方法
for i in stride(from: 3, through: 0, by: -1) {
print(i)
}
Swift 的 stride 函數(shù)返回一個(gè)任意可變步長 類型值的序列精偿±峤矗可變步長類型是可以設(shè)置偏移量的一維標(biāo)量。
他有兩個(gè)變種还最,
from墓阀,to,最后一個(gè)值將會(huì)嚴(yán)格小(大)于to的值
stride(from:3, to:0, by:-1) 表示3拓轻,2斯撮,1
from,through扶叉,最后一個(gè)值將會(huì)小(大)于等于through的值
stride(from:3, through:0, by:-1) 表示3勿锅,2,1枣氧,0