다른 함수를 전달인자로 받거나 결과를 함수로 반환하는 함수를 고차함수라고 한다.
주로 쓰이는 Map, Filter, Reduce에 대해 정리해보려고 한다.
func map<T>(_ transform: (Self.Element) throws -> T) rethrows -> [T]
기존 데이터를 수정하여 새로운 컨테이너를 만드는데 사용한다. 내부적으로 for-in과 같은 방식으로 동작하고, 컴파일러 최적화 성능이 좋다
let numArray = [1,3,5,7,9]
let newArray = numArray.map { $0 * 2 }
// 2, 6, 10, 14, 18
위 예시처럼 사용한다.
주로 클로저로 인자를 넘겨주기에 클로저 표현식의 '$0' 같은 표현들을 주로 사용한다. 클로저 표현식의 $0, $1
func filter(_ isIncluded: (Self.Element) throws -> Bool) rethrows -> [Self.Element]
데이터를 추출하고자 할 때 사용한다. 값을 필터링 해 새 컨테이너를 만든다.
let strArray = ["str","123","456","ab","abc","안녕"]
let newArray = strArray.filter { $0.count == 3 }
//str, 123, 456, abc
위 예시처럼 사용한다.
func reduce<Result>(
into initialResult: Result,
_ updateAccumulatingResult: (inout Result, Self.Element) throws -> ()
) rethrows -> Result
내부 값을 합쳐 새로운 값을 만든다. 초기값을 지정해줄 수 있다.
let numArray = [1,2,3,4,5,6,7,8,9]
let new = numArray.reduce(0) {$0 + $1}
//45
Array의 값들을 모두 더해주는 예시.
func joined() -> FlattenSequence<Self>
func joined(separator: String = "") -> String
위의 함수들과 주로 같이 쓰이는 함수로 배열에 있는 여러 원소들을 하나로 묶어줄 때 사용한다.
var message = ["Swift", "is","fun"]
var newString = message.joined(separator:" ")
print(newString)
//Swift is fun