BETA

Swift : map, compactMap, flatMapの違い

投稿日:2019-04-09
最終更新:2019-04-09

最近ようやくflatMapを使う機会に恵まれて、覚えたので備忘録に。

map

https://developer.apple.com/documentation/swift/sequence/3018373-map
基本形。値を変形して連結する。
例えば、数字の配列に全部5をかけて、配列にしなおす、的な。

let numbers = [1, 2, 3, 4]  
let mapped = numbers.map { $0 * 5 }  
// [5, 10, 15, 20]  

compactMap

https://developer.apple.com/documentation/swift/sequence/2950916-compactmap
nilを排除するmap。
値を変換しつつ、変換できなかったものを排除して配列を作る時に便利。

let values = ["1", "2", "3", "more"]  
let mapped = values.map { Int($0) }  
// [Optional(1), Optional(2), Optional(3), nil]   
// そもそも型が [Int?]  

let values = ["1", "2", "3", "more"]  
let compactMapped = values.compactMap { Int($0) }  
// [1, 2, 3]  

flatMap

https://developer.apple.com/documentation/swift/sequence/2905332-flatmap
mapの、一次元配列にする版。
map結果が二次元配列になってしまうが、一次元で扱いたい時に使う。

let numbers = [1, 2, 3, 4]  
let mapped = numbers.map { Array(repeating: $0, count: $0) }  
// [[1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]  

let flatMapped = numbers.flatMap { Array(repeating: $0, count: $0) }  
// [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

日々のつまづきや失敗、発見を記録して生きたいのでござるよ。

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう