[Swift 코테 기초] 고차함수

2022. 4. 12. 18:18Swift 기초 정리

728x90

//공부 기록용 포스팅입니다. 틀린 부분이 있을 경우 댓글로 알려주시면 감사합니다! 😎

 

 

  • 전달인자로 함수를 전달받거나 함수 실행의 결과를 함수로 반환하는 함수
  • map, filter, reduce

1. map

  • 컨테이너 내부의 기존 데이터를 변형하여 새로운 컨테이너 생성
    • 컨테이너 타입: Array, Set, Dictionary 등

1-1. 기존의 for 구문 사용

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

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"]

1-2. map

//전달인자 자리에 클로저
//각각의 요소 하나를 어떻게 변환을 해서 어떻게 돌려줄지를 지정할 수 있다: Int 요소 하나하나를 Int로 반환해서 새로운 컨테이너에 넣을 것
doubledNumbers = numbers.map({(number: Int) -> Int in 
    return number * 2
})

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]

 

2. filter

  • 컨테이너 내부의 값을 걸러서(= 조건에 부합하는 요소들만) 새로운 컨테이너로 추출

2-1. for 구문 사용

var filtered: [Int] = [Int]()
for number in numbers {
    if number % 2 == 0 {
        filtered.append(number)
    }
}
print(filtered)  //[0, 2, 4]

2-2. filter

//변수로 선언하지 않고 상수로 한 번에 선언하고 값을 할당할 수 있다.
//return type이 true 일때만 number요소가 새로운 컨테이너에 들어간다.

let numbers = (1...6)

let evenNumbers: [Int] = numbers.filter{
    (number: Int) -> Bool in 
    return number % 2 == 0
}
print(evenNumbers) //[0, 2, 4]

let oddNumbers: [Int] = numbers.filter {$0 % 2 != 0}
print(oddNumbers)  //[1, 3]
  • let numbers = [1...6] 일 경우 '(Int) -> Bool' 유형 값을 예상 인수 유형인 '(ClosedRange<Int>) throws -> Bool'(으)로 변환할 수 없습니다. 

 

3. reduce

  • 컨테이너 내부의 콘텐츠를 하나로 통합
  • array의 모든 값을 더하고 싶을 때 사용할 수 있다.

3-1. for 구문 사용

var result: Int = 0

for number in numbers{
    result += number
}
print(result) //10

3-2. reduce

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

//초깃값이 3, numbers 내부의 모든 값을 뺸다.
var subtract: Int = numbers.reduce(3, {
    (first: Int, second: Int) -> Int in
    return first - second
})
print(subtract)  //-7

var multiply = numbers.reduce(1, { $0 * $1})
print(multiply)  //0

 

 

 

 

참고하였습니다. 감사합니다.

https://yagom.net/courses/swift-basic/lessons/고차함수/

728x90

'Swift 기초 정리' 카테고리의 다른 글

[Swift 기초] 연산자 오버로딩  (0) 2023.07.11
[Swift 기초] 접근제어  (0) 2022.04.13
[Swift 기초] 오류처리  (0) 2022.04.11
[Swift 기초] 익스텐션  (0) 2022.04.05
[Swift 기초] 프로토콜  (0) 2022.04.05