Swift连接两个Ranges

时间:2016-07-23 16:02:53

标签: ios swift

我有两个范围:

let r1: Range<Int> = 1...3
let r2: Range<Int> = 10...12

是否有一种Swift方式来连接/连接两个范围,以便我可以在一个for循环中迭代它们?

for i in joined_r1_and_r2 {
    print(i)
}

结果如下:

1
2
3
10
11
12

4 个答案:

答案 0 :(得分:7)

您可以创建一个嵌套数组,然后加入它们。

// swift 3:
for i in [r1, r2].joined() {
    print(i)
}

这里joined()的结果是FlattenBidirectionalCollection,这意味着它不会分配另一个数组。

(如果您遇到Swift 2,请使用.flatten()代替.joined()。)

答案 1 :(得分:2)

这是一种方法:

let r1 = 1...3
let r2 = 10...12

for i in Array(r1) + Array(r2) {
    print(i)
}

答案 2 :(得分:0)

您必须将它们转换为其他结构,因为范围必须是连续的。

一种可能的方式:

let r1: Range<Int> = 1...3
let r2: Range<Int> = 10...12

for i in ([r1, r2].joinWithSeparator([])) {
    print(i)
}

有多种方法可以实现相同的目标,我已经使用了一个可以轻松扩展到更多范围的方法。 kennytm's answer中的flatten是更好的选择。

当然,您也可以简单地迭代嵌套for

for r in [r1, r2] {
    for i in r {
        print(i)
    }
}

答案 3 :(得分:0)

一个替代方案是:

var combined = [Int]
combined.append(contentsOf: 1...3)
combined.append(contentsOf: 10...12)