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