2016-12-17 6 views
2

言う...私は配列[ 1, 2, 4, 5, 6, 9]を持っています。私はそれから別の配列を作るのが好きです。 ["1-2", "2-4", "4-5", "5-6", "6-9"]のように、1つの前の項目とそれに続く他の項目に基づいています。 Swift 3でこれを達成する最もクールな方法は何でしょうか?はい、私はこの古いファッションのやり方を知っています。しかし、mapreduceなどを使用してこれを行うためのクールな、または簡単な方法がある場合、私は疑問に思っています。スウィフト3のアイテムを組み合わせる最もクールな方法

おかげで、

+0

類似:[違いの配列を計算するにはどうすればいいですか?](http://stackoverflow.com/questions/36634032/how-do-i-calculate-an-array-of-differences) –

+2

uprooted @ vacawamaの答え。それは、理解できるものを犠牲にして「クール」であれば、なぜ重要なのでしょうか?少なくとも、達成しようとしていることについてのインラインコメントが必要です。** Swifty **は必ずしも** cool **と同じではありません。 – dfd

+0

Yah、そうです...古典的なファッションの方法とはちょっと違っています。 –

答えて

5

あなたが結果を生成するためにdropLastdropFirstとともにzipmapを使用することができます。

let arr = [ 1, 2, 4, 5, 6, 9] 

let result = zip(arr.dropLast(), arr.dropFirst()).map { "\($0)-\($1)" } 
print(result) 

出力:

["1-2", "2-4", "4-5", "5-6", "6-9"] 

zipは、2つのシーケンスから1組のタプルペアを作成することで動作します。 mapは、これらのペアを取り、String補間を使用してこれらのペアを結合します。 @MartinRが指摘したように、異なる長さの配列を持つzip作品以来、あなたはdropLast()をスキップすることができ


let result = zip(arr, arr.dropFirst()).map { "\($0)-\($1)" } 

zipにあなたオプション -click見ドキュメントから:

2つのシーケンスがzipに渡された場合( :)が異なる長さである場合、結果の配列は短い配列と同じ長さになります。

+4

これは 'dropLast()'がなくても動作します –

+0

ありがとう、それは実際にはシンプルで素敵です。 –

関連する問題