带范围的Swift开关

时间:2016-01-01 03:17:00

标签: arrays swift switch-statement tuples

我有一个Array Int,想要查找每个实例的范围。

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

我有另外Array Tuple's 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

1 个答案:

答案 0 :(得分:1)

我很惊讶您可以运行代码。在我的Xcode 7.1中,它给出了运行时错误:

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

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

如果您想查找array中每个项目所属的范围,请尝试以下操作:

for a in array {
    if let range = (tupleArray.filter { $0.1 <= a && a <= $0.0 }).first {
        print("\(a) is within \(range)")
    } else {
        print("Cannot find a range for \(a)")
    }
}