Swiftのいくつかの高次関数
2309 ワード
sort
配列があるlet Arr = [13, 45, 27, 80, 22, 53]
// sort ,
let sortOneArr = Arr.sorted { (a: Int, b: Int) -> Bool in
return a < b
}
//コンパイラは、戻りタイプを自動的に推定するので省略できますlet sortTwoArr = Arr.sorted { (a: Int, b: Int) in
return a < b
}
//コンパイラはパラメータタイプを自動的に推定できますlet sortThreeArr = Arr.sorted { (a, b) in
return a < b
}
//コンパイラはパラメータ個数を自動的に推定できるので、1で代用できますlet sortFourArr = Arr.sorted {
return $0 < $1
}
//閉パッケージの関数体が1行しかなく、戻り値が必要な場合はreturnを省略できますlet sortFiveArr = Arr.sorted {
$0 < $1
}
//最も簡単:直接に関数<
に入ることができるlet sortSixArr = Arr.sorted(by:
map
//各要素の二乗let mapArr = Arr.map { $0 * $0 }
compactMap
///Returns an array containing the non- nil
results of calling the given///transformation with each element of this sequence. let optionalArr = [nil, 4, 12, 7, Optional(3), 9]
let compactMapArr = optionalArr.compactMap { $0 }
/// let possibleNumbers = ["1", "2", "three", "///4///", "5"]
let mapped: [Int?] = possibleNumbers.map { str in Int(str) }
// [1, 2, nil, nil, 5]
let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) }
// [1, 2, 5]
filter
//偶数フィルタlet evenArr = Arr.filter { $0 % 2 == 0 }
reduce
すべての文字を接続または加算let stringArr = ["1", "2", "3", "*", "a"]
let allStr = stringArr.reduce("") { $0 + $1 }
//// 123*a
let sum = intArr.reduce(0) { $0 + $1 }
// 240
let sum2 = intArr.reduce(0, +)
高次関数の連結
//配列を偶数フィルタリングし、その後すべての要素を秋平方、後加算let chainArr = [4, 3, 5, 8, 6, 2, 4, 7]
let resultArr = chainArr.filter {
$0 % 2 == 0
}.map {
$0 * $0
}.reduce(0) {
$0 + $1
}
// 136
let Arr = [13, 45, 27, 80, 22, 53]
// sort ,
let sortOneArr = Arr.sorted { (a: Int, b: Int) -> Bool in
return a < b
}
let sortTwoArr = Arr.sorted { (a: Int, b: Int) in
return a < b
}
let sortThreeArr = Arr.sorted { (a, b) in
return a < b
}
let sortFourArr = Arr.sorted {
return $0 < $1
}
let sortFiveArr = Arr.sorted {
$0 < $1
}
let sortSixArr = Arr.sorted(by:
//各要素の二乗
let mapArr = Arr.map { $0 * $0 }
compactMap
///Returns an array containing the non- nil
results of calling the given///transformation with each element of this sequence. let optionalArr = [nil, 4, 12, 7, Optional(3), 9]
let compactMapArr = optionalArr.compactMap { $0 }
/// let possibleNumbers = ["1", "2", "three", "///4///", "5"]
let mapped: [Int?] = possibleNumbers.map { str in Int(str) }
// [1, 2, nil, nil, 5]
let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) }
// [1, 2, 5]
filter
//偶数フィルタlet evenArr = Arr.filter { $0 % 2 == 0 }
reduce
すべての文字を接続または加算let stringArr = ["1", "2", "3", "*", "a"]
let allStr = stringArr.reduce("") { $0 + $1 }
//// 123*a
let sum = intArr.reduce(0) { $0 + $1 }
// 240
let sum2 = intArr.reduce(0, +)
高次関数の連結
//配列を偶数フィルタリングし、その後すべての要素を秋平方、後加算let chainArr = [4, 3, 5, 8, 6, 2, 4, 7]
let resultArr = chainArr.filter {
$0 % 2 == 0
}.map {
$0 * $0
}.reduce(0) {
$0 + $1
}
// 136
let optionalArr = [nil, 4, 12, 7, Optional(3), 9]
let compactMapArr = optionalArr.compactMap { $0 }
let possibleNumbers = ["1", "2", "three", "///4///", "5"]
let mapped: [Int?] = possibleNumbers.map { str in Int(str) }
// [1, 2, nil, nil, 5]
let compactMapped: [Int] = possibleNumbers.compactMap { str in Int(str) }
// [1, 2, 5]
//偶数フィルタ
let evenArr = Arr.filter { $0 % 2 == 0 }
reduce
すべての文字を接続または加算let stringArr = ["1", "2", "3", "*", "a"]
let allStr = stringArr.reduce("") { $0 + $1 }
//// 123*a
let sum = intArr.reduce(0) { $0 + $1 }
// 240
let sum2 = intArr.reduce(0, +)
高次関数の連結
//配列を偶数フィルタリングし、その後すべての要素を秋平方、後加算let chainArr = [4, 3, 5, 8, 6, 2, 4, 7]
let resultArr = chainArr.filter {
$0 % 2 == 0
}.map {
$0 * $0
}.reduce(0) {
$0 + $1
}
// 136
let stringArr = ["1", "2", "3", "*", "a"]
let allStr = stringArr.reduce("") { $0 + $1 }
//// 123*a
let sum = intArr.reduce(0) { $0 + $1 }
// 240
let sum2 = intArr.reduce(0, +)
//配列を偶数フィルタリングし、その後すべての要素を秋平方、後加算
let chainArr = [4, 3, 5, 8, 6, 2, 4, 7]
let resultArr = chainArr.filter {
$0 % 2 == 0
}.map {
$0 * $0
}.reduce(0) {
$0 + $1
}
// 136