안녕하십니까 공부하는 개발자 입니다.
오늘의 포스팅은 Collection의 마지막 Set입니다.
⚙️Set의 특성
Set의 경우에는 값이 중복되지 않으며 정렬되지도 않습니다.
list와 dictionary의 특성을 반반 섞어놓은 collection입니다.
hashing기법을 사용하기 때문에 검색속도가 Array보다 빠릅니다.
⚙️Set의 선언
Set의 경우에는 Array와 선언하는 방식이 같기 때문에 항상 타입을 지정해 줍니다.
1
2
3
4
|
let set = [1, 2, 2, 3, 3, 3]
set.count
let set2:Set<Int> = [1, 2, 2, 3, 3, 3]
set2.count
var words = Set<String>() |
cs |
이런식으로 선언을 한다면
set의 경우에는 [1, 2, 2, 3, 3, 3]으로 선언이 되지만
set2의 경우에는 값이 중복되지 않기 때문에 [1, 2, 3]으로 선언이 됩니다.
또한 빈값의 Set을 생성한다면 마지막 코드와 같이 선언해주면 된다.
⚙️Set의 검색
set의 경우에는 검색이 특기인 collection이기 때문에 가장 많이 쓰는 메서드 또한 검색 입니다.
1
2
3
4
5
6
7
8
9
|
//새로운 값을 추가
var insertResult = words.insert("Swift")
insertResult.inserted// 추가여부
insertResult.memberAfterInsert// 추가된 요소
//중복 허용이 되지 않는다.
insertResult = words.insert("Swift")
insertResult.inserted// 추가여부
insertResult.memberAfterInsert// 추가된 요소
|
cs |
insert를 변수에 담으면
(inserted false, memberAfterInsert "Swift")
값을 가지게 됩니다.
inserted는 추가 여부를 Bool로 반환하며 memberAfterInsert의 경우에는 추가된 요소를 반환해 줍니다.
⚙️Set의 update
1
2
3
4
5
6
7
8
|
//update메서드는 upsert형식으로 동작한다.
var update = words.update(with: "Swift")
update
//update가 된다면 update된 값을 리턴해주고
update = words.update(with: "Apple")
update
//값이 추가된다면 nil을 반환한다.
|
cs |
with 속성에는 update를 하는 값을 넣습니다.
update를 반환하면 with의 반환해주고 만약 값이 추가가 된다면 nil를 반환
즉, upsert를 진행하는 메서드 입니다.
⚙️Set의 삭제
1
2
3
4
5
6
7
|
//값을 삭제할때는 remove메서드사용
words.remove("Swift")//삭제된 값 리턴
words
//값이 없는 값을 삭제할 때는 nil리턴
words.remove("Ghost")
//전체를 삭제할때는 removeAll
words.removeAll()
|
cs |
공통적으로 remove메서드를 이용합니다.
⚙️Set의 값 비교 입니다.
1
2
3
4
|
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]
let d: Set = [1, 7, 5, 9, 3]
|
cs |
기본 셋팅값을 준비합니다.
기본적인 인자값 비교 입니다.
a == b //인자와요소의 수가 다르기 때문에 false반환
a != b //true
b == d //순서가 없기때문에 매번 값이 달라짐
비교는 배열이 조금더 쉽고 Set의 경우에는 집합비교에 특화 되어있습니다.
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
32
33
34
35
36
37
38
39
40
41
42
43
|
a.isSubset(of: a)//부분 집합
a.isStrictSubset(of: a)//진부분집합
b.isSubset(of: a)//부분 집합
b.isStrictSubset(of: a)//진부분집합\
a.isSuperset(of: a)// 상위집합
a.isStrictSuperset(of: a)//진 상위집합
a.isDisjoint(with: b)//교집합 두집합이 교집합이면 false리턴
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9]
c = [2, 4, 6, 8, 10]
//합집합, union의 경우에는 기존에있던 값을 리턴하는게 아니라 새로운 set을 리턴
var result = b.union(c)
//합집합이면서 기존의 set을 변경
b.formUnion(c)
b
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9]
c = [2, 4, 6, 8, 10]
//교집합
result = a.intersection(b)
result = c.intersection(b)//없으면 빈set
a.formIntersection(b)
a
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9]
c = [2, 4, 6, 8, 10]
//여집합
result = a.symmetricDifference(b)
a.formSymmetricDifference(b)
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9]
c = [2, 4, 6, 8, 10]
//차집합
result = a.subtracting(b)
//차집합은 조금 다르게 원본을 변경하고 싶으면 subtract를 쓴다.
a.subtract(b)
|
cs |
'Ios > Swift' 카테고리의 다른 글
[Swift] Stored Property 스위프트 저장속성 (0) | 2022.07.10 |
---|---|
[Swift] Structure & Class 스위프트 구조체와 클래스 (0) | 2022.07.09 |
[Swift] Swift Collection Dictionary 스위프트 딕셔너리 (0) | 2022.06.29 |
[Swift] Swift Collection Array_3 스위프트 배열_3 (0) | 2022.06.27 |
[Swift] Swift Collection Array_2 스위프트 배열_2 (0) | 2022.06.26 |