고차함수(Map, Filter, Reduce)

박찬우·2023년 7월 17일
1

고차함수

다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수

Map

Map 기존 데이터를 변형할때 이용한다.

["1", "2", "3", "4", "5"]

을 숫자 형태의

[1,2,3,4,5]

로 변환하는 두가지 방법

  1. For -in 이용하기
let num = ["1", "2", "3", "4", "5"] // string 형태의 자료 선언
var numberArray: [Int] = [] // 빈 array 선언
for index in num {
    if let changeToInt = Int(index) {
        numberArray.append(changeToInt) // Int로 변환후 numberArray에 추가->모든 요소에 대해 반복
    }
}

print(numberArray)
  1. Map 이용하기
let stringArray = ["1", "2", "3", "4", "5"]
var numberArray = stringArray.map { Int($0)!} 

$ : 익명자
$0, 즉 첫번째 요소를 가져와서 Int 형태로 바꾸고 그다음 $1, $2.. $4를 모두 Int형태로 바꾸어 numberArray에 저장한다.

Filter

기존 컨테이너의 요소 중 조건에 만족하는 값에 대해 새로운 컨테이너를 만들어 반한다.

숫자 중 짝수를 추출하기

  1. For 이용하기
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var evenNumbers: [Int] = []

for number in numbers { // numbers에서 가져온, for문 안에서 사용할 number에 대해서
    if number % 2 == 0 { 
        evenNumbers.append(number)
    }
}
  1. Filter 사용하기
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let evenNumbers = numbers.filter {$0 % 2 == 0}

print(evenNumbers) // 출력 = [2,4,6,8,10]

Reduce

기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환합니다. (?)이해가 안된다.
1. For문 사용하기

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
var sum = 0

for number in numbers {
    sum += number // 숫자를 하나씩 더해나간다.
}
  1. Reduce 사용하기 (1)
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0, +) // 0번째 인덱스 부터 모두 더해라

print(sum)
  1. Reduce 사용하기 (2)
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0) { $0 + $1 } // $0+$1, 즉 1,2를 더하여 
			//3을 $0에 넣고 새로운 $1, 3과 더한다. 
            //이 과정을 반복하여 합을 구한다.

0개의 댓글