[Swift 코테 기초] 고차함수
2022. 4. 12. 18:18ㆍSwift 기초 정리
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
참고하였습니다. 감사합니다.
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 |