Swift - 함수 (4_고차함수)

이한솔·2023년 8월 3일
0

Swift 문법 🍎

목록 보기
12/32

고차함수

다른 함수를 전달인자로 받거나 함수실행의 결과를 함수로 반환하는 함수
map, filter, reduce 함수는 스위프트 표준 라이브러리의 컨테이너 타입
Array, Set, Dictionary 등에 구현되어있다.



1. map

컬렉션 내부의 기존 데이터를 변형해서 새로운 컬렉션을 생성한다.

let numbers: [Int] = [0, 1, 2, 3, 4]
var doubledNumbers = [Int]()
var strings = [String]()


// for구문 사용
for number in numbers {
    doubledNumbers.append(number * 2)
    strings.append("\(number)")
}

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


// map 메서드 사용
// 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]

let stringArray = ["1", "2", "3", "4", "5"]
numberArray = stringArray.map { Int($0)! }

print(numberArray) // 출력값: [1, 2, 3, 4, 5]


2. filter

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

var filtered: [Int] = [Int]()

// for구문 사용
for number in numbers {
    if number % 2 == 0 {
        filtered.append(number)
    }
}

print(filtered) // 출력값: [0, 2, 4]


// filter 메서드 사용
// 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]


3. reduce

기존의 컨테이너의 요소에 대해 정의한 클로저로 매핑한 결과를 새로운 컨테이너로 반환한다.

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

// for 구문 사용
for number in numbers {
    sum += number
}

print(sum) // 출력값: 55


// reduce 메서드 사용 
// 1번째 표현식
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0, +)

print(sum) // 출력값: 55

// 2번째 표현식
let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
let sum = numbers.reduce(0) { $0 + $1 }

print(sum) // 출력값: 55

3개의 댓글

comment-user-thumbnail
2023년 8월 3일

깔끔한 정리 감사합니다!

답글 달기
comment-user-thumbnail
2023년 8월 3일

map과 filter는 진짜 열심히 해봐야겠어요!

답글 달기
comment-user-thumbnail
2023년 8월 3일

클로져 공부를 더 열심히 해야겠네요,,
좋은글 보고갑니다!

답글 달기