반응형
고차함수란 다른 함수를 전달인자로 받거나, 함수실행의 결과로
함수를 반환하는 함수를 뜻합니다.
함수의 외부에서 실행 흐름을 변형할 수 있기 때문에
재활용성 및 재사용성을 높여 주는 편리한 함수라고 할 수 있겠습니다.
이중 대표적인 map, filter, reduce를 공부해보도록 하겠습니다.
map
컬렉션 내부의 기존 데이터를 변형해 새로운 컬렉션을 생성합니다.
fucn map<T>(_ transform: (String) throws -> T) rethrows -> [T]
예제
let numArr: [Int] = [1, 2, 3, 4, 5]
var squardArr: [Int] = []
var stringArr: [String] = []
for문 사용
for num in numArr{
squardArr.append( num * num)
stringArr.append( "\(num)" )
}
print (squardArr) //[1, 4, 9, 16, 25]
print (stringArr) //["1", "2", "3", "4", "5"]
map 사용
squardArr = numArr.map({ (num: Int) -> Int in
return (num * num)
})
stringArr = numArr.map({ (num: Int) -> String in
return "\(num)"
})
print (squardArr) // [1, 4, 9, 16, 25]
print (stringArr) // ["1", "2", "3", "4", "5"]
//$0은 배열의 0번째 요소부터 마지막 요소까지 순차적으로 대입해 계산한다는 뜻입니다.
squardArr = squardArr.map{ $0 * $0 } //[1, 16, 81, 256, 625]
print (squardArr)
map은 배열 내부의 원소를 하나씩 매핑해주는 느낌인 것 같습니다.
filter
filter 함수는 이름그대로 내부의 값을 필터링해서 추출합니다.
func filter(_ isIncluded: (String) throws -> Bool) rethrows -> [String]
위의 numArr에서 홀수만 출력해보겠습니다.
for 구문 사용
for num in numArr{
if num % 2 == 1 {
filtered.append(num)
}
}
print (filtered) //[1, 3, 5]
filter 메서드 사용
let oddArr: [Int] = numArr.filter { (num: Int) -> Bool in
return num % 2 == 1
}
print (oddArr) // [1, 3, 5]
let oddArr2: [Int] = numArr.filter{ ($0 % 2 == 1) }
print (oddArr) // [1, 3, 5]
reduce
함수명 그대로 축약시키는 역할을 합니다.
컨테이너 내부의 콘텐츠를 하나로 통합합니다.
// initialResult : 초기값
func reduce<Result>(_ initialResult: Result, _ netPartialResult: (Reuslt, Int)
throws -> Result) rethrows -> Result
for문 사용
var result :Int
for num in numArr {
result += num
}
print(result) // 15
reduce메서드 사용
//초기값 0
let sum: Int = numArr.reduce(0, {(reuslt: Int, currentItem: Int) -> Int in
return frist + second
})
print(sum) //15
//초기값 10
let sum2 = numArr.reduce(10) {$0 + $1}
print(sum2) //25
공부에 도움이 된 사이트들
전체적인 공부 가이드라인
yagom.net/courses/swift-basic/lessons/%ea%b3%a0%ec%b0%a8%ed%95%a8%ec%88%98/
추가 참고
반응형
'Language > Swift' 카테고리의 다른 글
Swift 프로토콜 지향 프로그래밍 (POP) (0) | 2021.03.17 |
---|---|
Swift 접근제어 (0) | 2021.03.16 |
Swift 오류처리 (0) | 2021.03.15 |
Swift 익스텐션 (Extensions) (0) | 2021.03.15 |
Swift 프로토콜 기초 (0) | 2021.03.14 |