안녕하세요 :) 소들입니다!!!!!
이번 포스팅에선 Set(집합)을 사용할 때 알아두면 편한 메서드들을 좀 정리해보려고 해요!!!
원래 설명충이긴 한데, 이번 포스팅만큼은 단순 명료하게 가겠슴니다!!
(물론 설명할 게 있는 부분은 설명충임 :))
모든 포스팅은 편의 말투로 합니다~!!
.
.
.
자 먼저..!!!
Swift의 Set의특징에 대해서 간!!!딴!!!!히!!!! 먼저 알고 가겠움 :)
🔸정렬되지 않은 컬렉션이다
(따라서 Set을 print할 경우, 삽입 순서에 상관 없이 뒤죽박죽 나온다)
🔸배열과 달리 중복 요소를 허용하지 않는다
🔸해시를 통해 값을 저장하기 때문에 배열에 비해 검색 속도가 빠르고, 당연히
저장되는 자료형은 Hashable 프로토콜을 준수하고 있어야 한다
🔸Swift는 형식에 민감쓰 하기 때문에, 저장되는 자료형은 모두 동일한 자료형이어야 한다
끄...읕... 🌝
아 참고로, Set도 배열&딕셔너리와 같은 Collection Type이고, 때문에
구조체로 Stack에 저장됨! 다만, NSSet이란 클래스도 지원함(Objective-C)
1. Set 생성하기
<주의> Set은 타입추론으로 생성 불가 (선언이 배열과 동일하게 때문)
var set1 = [1, 5, 3, 2, 1] // Set이 아닌 배열로 추론됨
// 1. 타입 Annotation으로 생성하기
var set2: Set<Int> = []
// 2. 생성자로 생성하기
var set3 = Set<Int>()
|
주의할 점!! Set은 배열과 동일하게 []로 생성하기 때문에,
타입 추론으론 생성할 수 없음!!! (무조건 배열로 추론됨)
또한, 여러 타입의 값을 저장하고 싶을 경우 Any를 선언할 수 있는 배열이나 딕셔너리의 Value와 달리,
앞서 말했듯 Set은 Hashable 프로토콜을 채택한 자료형만 저장할 수 있기 때문에
Any로는 생성 불가하지만!!
타입에 민감하지 않은 Objective-C의 NSSet이란 클래스를 이용하면
// 3. 여러 타입을 저장하는 Set 생성하기
var set3: NSSet = [1, "s"]
|
여러 타입을 지정하는 Set 사용 가능 :)
2. Set 갯수 확인하기
var set1: Set<Int> = [1, 2, 5, 0]
let count: Int = set1.count // Set 갯수 확인 : 4
let isEmpty: Bool = set1.isEmpty // Set 비었는지 확인 : false
|
만약 Set이 비었는지를 확인하고 싶다면
set1.count == 0 이 구문보단, set1.isEmpty를 사용합시다 :)
3. Set 요소 확인하기
var set1: Set<Int> = [1, 2, 5, 0]
set1.contains(1) // true
set1.contains(10) // false
|
배열과 동일하게 contains 메서드를 쓰면 됨!!
근데 배열과 다른 점은, 배열의 contains를 쓸 경우 순회 탐색을 하지만,
(0번 index부터 마지막 index까지 요소가 있나 순차적으로 탐색)
Set은 딕셔너리와 같이 해시로 구현되어 있어, 해ㅅ ㅣ충돌이 일어나지 않는 한
시간 복잡도가 상수로, O(1) 만큼만 걸림!!! (배열에 비해 매우 빠르단 것)
4. Set에 값 추가하기
var set1: Set<Int> = [1, 2, 5, 0]
// 1. insert : 값을 추가하고, 추가된 결과를 튜플로 리턴 (중복이면 false, 추가된 값)
set1.insert(1) // (false, 1)
set1.insert(10) // (true, 10)
// 2. update : 값이 존재하지 않으면 추가 후 nil 리턴, 존재할 경우 덮어쓰기 후 덮어쓰기 전 값 리턴
set1.update(with: 1) // Optioanl(1)
set1.update(with: 120) // nil
|
보통 insert와 update를 합쳐서 upsert 작업이라고 함 :)
위 두 함수는 모두 Set에 upsert 작업을 하지만, 결과 값의 차이가 있음!!!
5. Set 요소 삭제하기
var set1: Set<Int> = [1, 2, 5, 0]
// 1. remove() : 한 가지 요소 삭제할 때 사용, 삭제 후 삭제한 값 return (없는 요소 삭제 시 nil 리턴)
set1.remove(1) // Optional(1)
set1.remove(10) // nil
// 2. removeAll() : 전체 요소 삭제
set1.removeAll()
|
쉽군 :)
6. Set 비교하기
6-1. ==(!=) 연산자로 비교하기
var set1: Set<Int> = [1, 2, 5, 0]
var set2: Set<Int> = [0, 2, 1, 5]
var set3: Set<Int> = [1, 3, 11, 20]
set1 == set2 // true
set1 == set3 // false
|
set은 정렬되지 않은 Collection 이기 때문에,
순서에 상관 없이 모든 요소가 같으면 비교 연산자가 true가 됨!!
6-2. 포함관계 확인하기
① 부분 집합 : isSubSet(of:)
var set1: Set<Int> = [1, 2, 5, 0]
var set2: Set<Int> = [1, 2]
set1.isSubset(of: set2) // false
set2.isSubset(of: set1) // true
|
② 상위 집합 : isSuperSet(of:)
var set1: Set<Int> = [1, 2, 5, 0]
var set2: Set<Int> = [1, 2]
set1.isSuperset(of: set2) // true
set2.isSuperset(of: set1) // false
|
③ 같은 집합 / 서로수 집합 : isDisjoint(with:)
var set13: Set<Int> = [1, 2, 5, 0]
var set14: Set<Int> = [1, 2, 5, 0]
var set15: Set<Int> = [3, 7, 9, 10]
set13.isDisjoint(with: set14) // false (같은 집합 : 모든 요소가 동일한 집합)
set15.isDisjoint(with: set13) // true (서로수 집합 : 모든 요소가 다른 집합)
|
서로수 집합이면 true, 모든 요소가 동일하면 true
7. Set의 연산
음 이건 한번에 정리 하겠음 :)
var a: Set = [1,2,3,4,5,6,7,8,9]
var b: Set = [1,3,5,7,9]
var c: Set = [2,4,6,8,10]
// 1. intersection : 교집합을 새로운 Set으로 리턴
a.intersection(b) // [1, 3, 5, 9, 7]
b.intersection(c) // [] : 겹치는 요소 없음
// 2. union : 합집합을 새로운 Set으로 리턴
a.union(b) // [2, 7, 9, 4, 8, 5, 6, 1, 3]
b.union(c) // [9, 3, 10, 4, 1, 8, 7, 2, 6, 5]
// 3. sysmetricDifference : 여집합을 새로운 Set으로 리턴
a.symmetricDifference(b) // [4, 8, 6, 2]
b.symmetricDifference(c) // [10, 9, 8, 6, 7, 1, 2, 4, 3, 5]
// 4. subtracting : 차집합을 새로운 Set으로 리턴
a.subtracting(b) // [4, 8, 6, 2]
b.subtracting(c) // [9, 1, 3, 5, 7]
|
+ 만약 Set의 순회(for - in, forEach) 등에 대해 알고 싶으신 분은
이 포스팅을 참조해주센~~
.
.
.
Set을 사용할 때 어쩌면 필수고 어쩌면 알아두면 좋은
메서드들 정리 끝 :) 드디어 Collection Type 포스팅이 끝났다 ~.~
잘못된 내용, 피드백, 궁금증은 언제나 댓글 주세요 💩
그럼 20,000
'iOS > Swift' 카테고리의 다른 글
Swift) 열거형(Enumeration) 심화편 (2) | 2021.02.22 |
---|---|
Swift) 열거형(Enumeration) 기초편 (10) | 2021.02.16 |
Swift) Dictionary - 자주 사용하는 메서드 (5) | 2021.02.08 |
Swift) for - in / forEach 제대로 알고 쓰기 (4) | 2021.01.12 |
Swift) Array - 자주 사용하는 메서드 (4) | 2021.01.08 |