Swift 切换范围

Swift switch with range

我有一个 IntArray 并且想找到每个实例所在的范围。

let array: [Int] = [35,34,33,32,31,30,28,27,26,25,24,23,7,6,5,4,3,2,1]

我还有一个 Array of Tuple's of Int

let tupleArray: [(Int, Int)] = [(35,30),(28,22), (21,15), (14,8), (7,0)]

我正在使用 Switch 迭代它们。

for a in 0..<array.count {
    var iteration: Int = 0
    switch array[a] {
    case tupleArray[iteration].0...tupleArray[iteration].1:
        print("Within Range")
    default:
        print("Next iteration")
        repeat {
             iteration++ 
        } while tupleArray[iteration].0 < array[a]
    } 
}

我的问题是我怎样才能做到只有一种情况,然后在默认情况下它会一直持续下去,直到找到下一个数字将落入的范围。目前的代码工作完全找到直到有差距以上迭代。所以对于 35-30 和 28-23 它工作正常但是然后它去 21-15

令我惊讶的是您完全 运行 代码。在我的 Xcode 7.1 中,它给出了 运行 时间错误:

fatal error: Can't form Range with end < start

...因为您的元组是 (end, start) 形式,而不是相反的形式。

如果你想找到 array 中的每个项目属于哪个范围,试试这个:

for a in array {
    if let range = (tupleArray.filter { [=11=].1 <= a && a <= [=11=].0 }).first {
        print("\(a) is within \(range)")
    } else {
        print("Cannot find a range for \(a)")
    }
}