[英]Swift concatenate two Ranges
我有两个范围:
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
您可以创建一个嵌套数组,然后加入它们。
// swift 3:
for i in [r1, r2].joined() {
print(i)
}
FlattenBidirectionalCollection
joined()
结果是FlattenBidirectionalCollection
,这意味着它不会分配另一个数组。
(如果您遇到Swift 2,请使用.flatten()
而不是.joined()
。)
这是一种方法:
let r1 = 1...3
let r2 = 10...12
for i in Array(r1) + Array(r2) {
print(i)
}
您必须将它们转换为另一个结构,因为范围必须是连续的。
一种可能的方式:
let r1: Range<Int> = 1...3
let r2: Range<Int> = 10...12
for i in ([r1, r2].joinWithSeparator([])) {
print(i)
}
有多种方法可以实现相同的目标,我已经使用了一个可以轻松扩展到更多范围的方法。 flatten
的kennytm的回答是一个更好的选择。
当然,你也可以简单地重复一个嵌套for
:
for r in [r1, r2] {
for i in r {
print(i)
}
}
另一种选择是:
var combined = [Int]
combined.append(contentsOf: 1...3)
combined.append(contentsOf: 10...12)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.