我有两个范围:
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
答案 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)