繁体   English   中英

Swift连接两个Ranges

[英]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)
}

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

当然,你也可以简单地重复一个嵌套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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM