티스토리 뷰
배열에서 중복된 Element를 제거하는 방법에는 여러 방법이 있겠지만 쉬운 방법은 딕셔너리를 활용하는 것 입니다.
간단히 배열을 extension 시켜줍니다.
저기서 주목해줄 건 updateValue가 리턴을 한다는 것입니다.
키가 이미 있으면 OriginalValue를 리턴하고, 키가 없으면 nil을 리턴한다.
예를 들어보겠습니다.
array배열에는 1, 4, 4, 4, 5, 1, 3로 1과 4가 중복되네요.
원하는 결과물은 1,4,5,3 즉 중복되는 요소는 제거하고 유니크한 값만 뽑아내고 싶습니다.
먼저 딕셔너리(dict)를 만들어 key와 value를 업데이트해줍니다.
key는 각각의 요소 1, 4, 4, 4, 5, 1, 3 가 되겠네요.
앞서 말한 대로 키가 이미 있으면 OriginalValue를 리턴하고, 키가 없으면 nil을 리턴한다가 맞는지 확인해보죠.
(updateValue를 출력한 이유는 리턴 값을 찍어내기 위함입니다.)
출력문을 자세히 봐주세요.
처음 1에 대해서 dict딕셔너리에는 key가 존재하지 않으므로 nil을 반환합니다.
두 번째 4로 마찬가지고요.
하지만 세 번째와 네 번째는 Optional(true)가 리턴됩니다.
키가 이미 있으면 OriginalValue를 리턴하고, 키가 없으면 nil을 리턴한다.
그럼 이 특징을 사용해서 유니크한 값만 뽑아 봅니다.
확장을 시켜줍니다.
Element는 딕셔너리 키가 될 수 있게 Hashable으로 조건을 둡니다.
removeDuplicates메소드를 살펴봅시다.
[Element: Bool]으로 정의된 addedDict 딕셔너리가 있고.
뒤에 return filter을 봅니다.
filter 안에 클로져 부분을 보면 addedDict.updateValue(true, forKey: $0) == nil 이 적혀있습니다.
아까 위에서 딕셔너리의 특징을 다시 기억해주세요.
키가 이미 있으면 OriginalValue를 리턴하고, 키가 없으면 nil을 리턴한다.
filter를 사용하면 addedDict.updateValue(true, forKey: $0) == nil 조건에 해당하는 것만 추출해 배열로 리턴하겠죠.
즉 처음으로 update 되는 값 들만 걸러내 집니다.
그것을 리턴하면 [1, 4, 5, 3]가 나오겠네요.
'Tech > Swift' 카테고리의 다른 글
스위프트 정렬 sort sorted차이점 (0) | 2019.09.17 |
---|---|
정수형 숫자 타입 맞추기 (0) | 2019.07.22 |
Phantom Type 팬텀타입 (0) | 2019.05.07 |
Swift ARC에 대해서(3) (0) | 2019.04.20 |
Swift ARC에 대해서(2) (0) | 2019.04.19 |
- Total
- Today
- Yesterday
- leetcode
- objc
- SWIFT
- 딥러닝
- Animation
- 알고리즘
- 독서
- 머신러닝
- 스위프트
- Xcode
- 책 추천
- ARC
- stanford SwiftUI
- wwdc
- rxswift
- 문자열
- 책 후기
- iOS SwiftUI
- ios
- Deep learning
- ReactiveX
- Algorithm
- swiftUI
- objective-c
- 애니메이션
- RX
- swift5
- 스위프트UI
- string
- 책
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |