고차 함수

ulls12·2023년 12월 14일
0

Swift TIL

목록 보기
16/60
post-thumbnail

Array에서 유용하게 쓰이는 함수

var numbers = [ 1, 2, 3 ]
print(numbers.min()) // Optional(1)
print(numbers.max()) // Optional(3)

배열의 요소가 비교가 가능한 프로토콜을 준수하는 타입이라면, max(), min() 메서드를 활용하여 최대, 최솟값을 구할 수 있다
반환 값은 옵셔널 타입이고 언래핑하여 사용할 수 있다
비교 불가능한 요소들의 배열일 경우, 컴파일 에러를 발생하고 빈 배열에서 사용하면 nil 을 반환한다

고차함수

  • 다른 함수를 인자로 받거나, 함수의 결과로 함수를 반환하는 함수

map 함수

  • 기존 데이터를 변형하여 새로운 컬렉션을 생성한다
  • 기존의 컬렉션의 요소에 대해 정의한 익명함수로 매핑한 결과를 새로운 컬렉션으로 반환한다
let stringArray = ["1", "2", "3", "4", "5"]
numberArray = stringArray.map { 
		if let changeToInt = Int($0) {
				return changeToInt
		}
		return 0
}
  • $0와 $1
    { } 를 익명함수인 클로저라고 한다. 클로저의 매개변수 이름이 필요하지 않은 경우 단축 인자 이름을 활용할 수 있다.
    단축 인자는 순서대로 $0, $1, $2... 으로 표현한다
    $0은 첫 번째 인자, $1은 두 번째 인자를 뜻한다

filter 함수

  • 기존 컨테이너의 요소 중 조건에 만족하는 값에 대해 새로운 컨테이너를 만들어 반환한다
let numbers1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
let evenNumbers2 = numbers1.filter { $0 % 2 == 0 } // 배열 중 2로 나눈 나머지가 0인 것만 걸러낸다
print(evenNumbers2) 
// [2, 4, 6, 8]

reduce 함수

  • 기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환한다
let numbers3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum1 = numbers3.reduce(0, +) // 초기값을 0으로 설정하고 각 배열들을 차례로 더한다
print(sum1)
// 또 다른 케이스
let numbers4 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum2 = numbers4.reduce(0) { $0 + $1 } 
/* 첫 번째 인자인 1과 두 번째 인자인 2를 더하고 3이 된다. 더한 값 3은 다시 첫 번째 인자가 되고,
두 번째 인자는 숫자 3이 된다. 3 + 3 = 6 이 되고 -> 6 + 4 = 10 ... 이런 식으로 반복이 되고 배열의 끝까지 나아간다 */
print(sum2)
profile
I am 개발해요

0개의 댓글