SwiftにおけるmapとflatMapの集合に対する役割を理解する
mapとflatMapは関数式プログラミングでよく見られる概念で、pythonなどの言語にあります.mapとflapMap関数を使用すると、配列を別の新しい配列に簡単に変換できます.
map関数は配列によって呼び出され、配列内の各要素に作用する閉パケットをパラメータとして受け入れることができる.閉包は、変換された要素を返し、変換された要素をすべて新しい配列にします.
簡単に言えばmapはマッピング関数であり,一つの集合を別の集合にマッピングする.
SwiftのflatMapは理解しにくいが、flatMapはmap関数に似ているが、nilの値を持つ要素を捨てている.
オプションのタイプを処理するために、flatMapは再ロードされました.オプションタイプの配列が受け入れられ、nil値のないオプションタイプからなるパケットが返されます.
次はflatMapの定義です
次のコード例を参照してください.
実行結果
[nil, Optional("sss 2"), Optional("sss 3"), Optional("sss 4"), Optional("sss 5"), Optional("sss 6"), Optional("sss 7")]["sss 2", "sss 3", "sss 4", "sss 5", "sss 6", "sss 7"]
参考記事
http://swift.gg/2015/08/06/swift-2-flatmap/
https://segmentfault.com/a/1190000004050907
map関数は配列によって呼び出され、配列内の各要素に作用する閉パケットをパラメータとして受け入れることができる.閉包は、変換された要素を返し、変換された要素をすべて新しい配列にします.
簡単に言えばmapはマッピング関数であり,一つの集合を別の集合にマッピングする.
SwiftのflatMapは理解しにくいが、flatMapはmap関数に似ているが、nilの値を持つ要素を捨てている.
flatMap
は配列ではなく容器を処理しているので、よりよく理解することができます.オプションのタイプを処理するために、flatMapは再ロードされました.オプションタイプの配列が受け入れられ、nil値のないオプションタイプからなるパケットが返されます.
次はflatMapの定義です
extension SequenceType {
/// Return an `Array` containing concatenated results of mapping `transform`
/// over `self`.
func flatMap<S : SequenceType>(@noescape transform: (Self.Generator.Element) -> S) -> [S.Generator.Element]
}
extension SequenceType {
/// Return an `Array` containing the non-nil results of mapping `transform`
/// over `self`.
func flatMap<T>(@noescape transform: (Self.Generator.Element) -> T?) -> [T]
}
次のコード例を参照してください.
let test1 = (1...7).map{ (i : Int) -> String? in
return i > 1 ? String("sss \(i)") : nil
}
print(test1)
let test2 = (1...7).flatMap{ (i : Int) -> String? in
return i > 1 ? String("sss \(i)") : nil
}
print(test2)
実行結果
[nil, Optional("sss 2"), Optional("sss 3"), Optional("sss 4"), Optional("sss 5"), Optional("sss 6"), Optional("sss 7")]["sss 2", "sss 3", "sss 4", "sss 5", "sss 6", "sss 7"]
参考記事
http://swift.gg/2015/08/06/swift-2-flatmap/
https://segmentfault.com/a/1190000004050907