map,reduce,filter,flatmap

2718 ワード

swiftのこれらの文法はコードをより簡潔にすることができます.Javascriptも似たような文法があると思いますが、それは単にクローズドパッケージを通して配列や集合などをクローズド処理して結果に戻ります.
map
一つの方法では、閉じたパケット内では、一般的な型を返します.これは、行列のタイプ変換を可能にすることを示しています.var values = [2.0,3.0,4.0,5.0]上記の配列を逐次平方にしたいならば、最も容易に考えられるのは巡回配列であり、その後、各平方var nValues = [Double]()
for value in values {
nValues.append(value * value)
}
に対してであるが、mapを使用すると、let sqares = values.map { (value) -> Double in
return value * value
}
を簡単にして、ここで可変ではない行列を返して、安全点を得ることができるだろう.
簡略化ポイントlet squeres = values.map{ value in return value * value }もう少し簡略化してください.
数字をやってピンインを回転してlet squres = values.map{$0 * $0}簡略点を遊びます.
印刷結果:let scores = [0,28,124]
let words = scores.map { (score) -> String in
return NumberFormatter.localizedString(from: NSNumber.init(value: score), number: .spellOut)
}
Filter
一つの方法だけがクローズドされています.ブックを返す必要があります.let words = scores.map{NumberFormatter.localizedString(from: NSNumber.init(value: $0), number: .spellOut)}簡略点let event=nums.filter{0%2=0}
Reduce
パラメータ間の処理は、クローズドの結果を返します.設定値があります.比較や演算ができます.["zero", "twenty-eight", "one hundred twenty-four"]let nums = [1,2,3,5,6]
let event = nums.filter { (num) -> Bool in
return num % 2 == 0
}
このプリセット値を無視すると0に設定されます.let items = [2.0,4.0,5.0,7.0]簡略化ポイントlet totals = items.reduce(10) { (result, item) -> Double in
return result - item
}
flatMap
2つの方法があります.クローズド内では、1つのシーケンスを返しても良いし、1つのオプション値let totls = items.reduce(0) { (result, item) -> Double in
return result + item
}
をマージした要素let totals = items.reduce(0,+)のタイプの変換クローズド内の行列を返しても良いし、map let collects = [[2,3,4,5],[1,5,6],[2,4]]に協力して.
クローズド内で任意の値を返し、reduce let tess = collects.flatMap { $0 }に協力する.
配列を返します.let tess = collects.flatMap { (tests) -> [Double] in
return tests.map({ (t) -> Double in
return Double(t)
})
}
要素の平方に対して、2つの$0は意味が違っています.let tess = collects.flatMap { (tests) -> Int? in
return tests.reduce(0, { (ls, lh) -> Int in
return ls + lh
})
}
文字列は自動的にnilを削除できます.let tess = collects.flatMap {
param in param.filter { $0 % 2 == 0}
}
let tess = collects.flatMap{ $0.map { $0 * $0} }相互嵌合チェーン処理let strs = ["li","wang",nil,"xiao","zhang",nil]let nstrs = strs.flatMap{$0}let digs = [8,4,3,6,7]let tots = digs.filter{$0 >= 5}.reduce(0,+)print(tots)