2016-07-23 7 views
4

私は2つの範囲があります。スウィフトCONCATENATE二つの範囲

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

私は1つのforループ内でそれらの両方を反復処理することができるような二つの範囲に参加/ CONCATするスウィフト方法はありますか?結果は次のようになり

for i in joined_r1_and_r2 { 
    print(i) 
} 

1 
2 
3 
10 
11 
12 

答えて

6

あなたはネストされた配列を作成し、それらを結合することができます。

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

ここjoined()の結果は、それが別の配列を割り当てないことを意味FlattenBidirectionalCollectionあります。

(。あなたはスウィフト2で立ち往生している場合は、代わりに.joined().flatten()を使用)

+0

それは詳細もteached持っているので、私はあなたの答えをupvotedています内部コレクション型私はまだSwiftのデザイナーに賞賛しなければなりません。 – Sulthan

0

範囲は連続的でなければならないので、あなたが別の構造に変換する必要があります。

1つの可能な方法:

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

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

同じことを達成するための複数の方法がありますが、私は複数の範囲に容易に拡張されるものを使用しました。 flattenkennytm's answerに設定することをお勧めします。もちろん

、あなたはまた、単に、ネストされたforに繰り返すことができます:

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

ここではそれを行うための一つの方法である:

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

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

これは避けたい中間配列を作成します –

関連する問題