Can't form Range with upperBound < lowerBound

 for j in (arr.count-1) ..< 0{
            self.swap(arr: &arr, a: 0, b: j)//将堆顶元素与末尾元素进行交换
            self.adjustHeap(arr: &arr, i: 0, length: j)//重新对堆进行调整
        }

这段代码中程序崩溃
看了许多关于Swift for循环的文章,发现基本上都是正序的for循环,对于逆序上述写法是错误的,直到我发现了这个方法。。。

for j in  (0 ..< (arr.count-1)).reversed(){
            self.swap(arr: &arr, a: 0, b: j)//将堆顶元素与末尾元素进行交换
            self.adjustHeap(arr: &arr, i: 0, length: j)//重新对堆进行调整
        }

用这个就可以倒序for循环了
还有另一种比较优雅而且装X的方法

for i in stride(from: 3, through: 0, by: -1) {  
     print(i)  
}  

Swift 的 stride 函数返回一个任意可变步长 类型值的序列。可变步长类型是可以设置偏移量的一维标量。
他有两个变种,
from,to,最后一个值将会严格小(大)于to的值

stride(from:3, to:0, by:-1) 表示3,2,1

from,through,最后一个值将会小(大)于等于through的值

stride(from:3, through:0, by:-1) 表示3,2,1,0

你可能感兴趣的:(Can't form Range with upperBound < lowerBound)