Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- global soop
- sqoop
- 네이버 부스트캠프
- Swift 디자인패턴
- 애플 디벨로퍼 아카데미 21주차 회고
- 애플 디벨로퍼 아카데미
- swift문법
- 숭실대
- 제앱소
- useReducer
- 데이터베이스 공부
- StateObject
- 네이버 치지직
- 운영체제
- iOS 개발 오류
- 데이터베이스
- SWIFT
- ObservableObject
- 치지직
- react
- 앱 비교 프로젝트
- 애플 아카데미 후기
- ObservedObject
- Swift 기능
- 애플 디벨로퍼 아카데미 후기
- 소프트웨어분석및설계
- OS
- Swift 문법
- Apple Developer Academy @ POSTECH
- apple developer academy 후기
Archives
- Today
- Total
사과하는 제라스
[Swift 문법] 고차함수 - reduce 본문
목차
728x90
반응형
reduce를 활용하면 주어진 콜렉션 타입 내 모든 요소에 대해 연이은 작용을 할 수 있다.
뭔 소리야...?
그냥 예를 들면,
1. 배열 내 모든 값을 더하고 싶을 때
2. 배열 내 모든 값을 곱하고 싶을 때 등등
코드로 보자.
let nums = [1,2,3,4,5,6,7,8,9,10]
// 이런 숫자 list 내 모든 원소를 더하고자 하면 보통 for문을 써서 모든 값을 더한다.
var sum = 0
for num in nums {
sum += num
}
print(sum)
하지만 이런 for문 말고 reduce를 쓰면 원큐에 모든 값에 대한 작업을 적용할 수 있다.
방법1.
let numberArray = [1,2,3,4,5,6,7,8,9,10]
let sum = numberArray.reduce(0, { (first: Int, second: Int) -> Int in
return first + second
})
print(sum)
이렇게 매개변수, 반환 타입, return을 사용한 것도 괜찮지만 다음처럼 모두 생략하는 방식으로도 가능하다
방법2.
let numberArray = [1,2,3,4,5,6,7,8,9,10]
let sum = numberArray.reduce(0) { $0 + $1 }
print(sum)
사실 더 간단하게는, 다음처럼 딱 +나 *와 같은 계산 operator만 주어도 된다.
방법3.
let numberArray = [1,2,3,4,5,6,7,8,9,10]
let sum = numberArray.reduce(1, +)
print(sum)
이런 다양한 표현이 있는데 나는 개인적으로 방법2를 가장 많이 쓰게 될 것 같다.
Dictionary 타입에서의 reduce
더 공부하다보니 Dictionary 타입에서는 어떻게 쓰는지도 궁금했다.
Dictionary는 조금 복잡하지만 다음과 같은 방식으로 value에 접근해서 reducing을 진행한다.
let dictionary: [String: Int] = ["a": 1, "b": 2, "c": 3]
let sum = dictionary.reduce(0) { (result, keyValue) in
return result + keyValue.value
}
print(sum)
혹은 다음과 같은 방식으로 주어진 배열을 그룹핑할 수도 있다.
import UIKit
struct Friend : Hashable {
var name: String
var age: Int
}
let myFriends = [
Friend(name: "철수", age: 10),
Friend(name: "영희", age: 20),
Friend(name: "찰리", age: 20),
Friend(name: "레이첼", age: 30),
Friend(name: "수잔", age: 30)
]
let totalAge = myFriends.reduce(0) { partialResult, aFriend in
return partialResult + aFriend.age
}
let groupedFriends = myFriends.reduce(into: [Int: [Friend]]()) { partialResult, aFriend in
partialResult[aFriend.age, default: []].append(aFriend)
}
print(groupedFriends)
728x90
반응형
'제라스의 iOS 공부 > Swift 문법' 카테고리의 다른 글
[Swift 문법] Zip - 서로 다른 배열을 묶어주는 방법 (0) | 2023.08.19 |
---|---|
[Swift 문법] Equatable 프로토콜 (1) | 2023.08.19 |
[Swift 문법] 멀티 트레일링 클로저(multi-trailing Closure) (0) | 2023.08.18 |
[Swift 문법] Codable (0) | 2023.08.18 |
[Swift 문법] Dictionary grouping (0) | 2023.08.18 |