[Swift] 고차함수 map, filter, reduce

선주·2022년 4월 11일
0

Swift

목록 보기
15/20

📌 map

컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너 생성
-> 전달인자 자리에 클로저가 들어와서, 각각의 요소를 어떻게 변형해서 무엇으로 돌려줄 것인지 지정한다.

// numbers를 변형해서 doubledNumbers, strings로 받을 예정!
let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers: [Int]
var strings: [String]

// numbers의 각 요소를 2배하여 새로운 배열 반환
doubledNumbers = numbers.map({ (number: Int) -> Int in
    return number * 2
})

// numbers의 각 요소를 문자열로 변환하여 새로운 배열 반환
strings = numbers.map({ (number: Int) -> String in
    return "\(number)"
})

print(doubledNumbers) // [0, 2, 4, 6, 8]
print(strings) // ["0", "1", "2", "3", "4"]

// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
doubledNumbers = numbers.map { $0 * 2 }
print(doubledNumbers) // [0, 2, 4, 6, 8]

📌 filter

컨테이너 내부의 값을 걸러서 새로운 컨테이너로 추출
-> 리턴값이 Bool인데, 이 Bool값이 true인 경우만 새로운 컨테이너에 추가된다.

let numbers: [Int] = [0, 1, 2, 3, 4]

// numbers의 요소 중 짝수를 걸러내어 새로운 배열로 반환
let evenNumbers: [Int] = numbers.filter { (number: Int) -> Bool in
    return number % 2 == 0
}
print(evenNumbers) // [0, 2, 4]

// 매개변수, 반환 타입, 반환 키워드(return) 생략, 후행 클로저
let oddNumbers: [Int] = numbers.filter {
    $0 % 2 != 0
}
print(oddNumbers) // [1, 3]

📌 reduce

컨테이너 내부의 콘텐츠를 하나로 통합

// 통합하고자 하는 someNumbers
let someNumbers: [Int] = [2, 8, 15]

// 초깃값이 0이고 someNumbers 내부의 모든 값을 더한다
let sum: Int = someNumbers.reduce(0, { (first: Int, second: Int) -> Int in
    return first + second
})
print(sum)  // 25

// 초깃값이 0이고 someNumbers 내부의 모든 값을 뺀다
var subtract: Int = someNumbers.reduce(0, { (first: Int, second: Int) -> Int in
    return first - second
})
print(subtract) // -25

// 초깃값이 3이고 someNumbers 내부의 모든 값을 더한다
let sumFromThree = someNumbers.reduce(3) { $0 + $1 }
print(sumFromThree) // 28


야호 ~!



야곰의 스위프트 기본 문법 강좌를 수강하며 작성한 내용입니다.

profile
기록하는 개발자 👀

0개의 댓글