일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- extension
- property
- 코딩테스트
- instance
- optional
- type
- 이니셜라이저
- UIKit
- tuist
- 디자인패턴
- initalizer
- delegate
- Git
- Method
- 스위프트
- Class
- init
- Foundation
- Unicode
- Protocol
- IOS
- Terminal
- enum
- Swift
- String
- interpace
- struct
- url
- Xcode
- initializer
Archives
- Today
- Total
아리의 iOS 탐구생활
[Swift] Set이란? 값 변경, 집합연산, 포함관계 본문
반응형
Swift의 자료구조 중 하나인 Set, 컬렉션 타입 이다.
순서가 중요하지 않거나, 항목이 한번만 표시되도록 해야하는 경우 배열 대신 집합을 사용할 수 있겠다.
배열과 달리 중복 요소를 허용하지 않고, 해시를 통해 값을 저장하기 때문에 배열에 비해 검색속도가 빠르다.
저장되는 자료형은 Hashable 프로토콜을 준수하고 있어야 한다.
✔️ 초기화
빈 Set을 만들땐 꼭 타입을 명시해줘야 한다. 빈 Set은 타입추론이 불가능하다.
var intSet: Set<Int> = []
값이 있는 Set은 'Set'만 명시해준다면 타입추론이 가능하다.
let stringSet: Set = ["lee", "ari", "babo"] // Set<String>
✔️ 값 추가
insert()와 update()는 같은 일을 하지만 아래와 같이 반환하는 값이 다르다.
var intSet: Set<Int> = []
intSet.insert(2) // (true, 2)
intSet.insert(3) // (true, 3)
intSet.insert(4) // (true, 4)
intSet.insert(2) // (false, 2) 중복된 값이면 false를 반환
intSet.update(with: 100) // nil 새로운 값이면 추가후 nil을 반환
intSet.update(with: 100) // Optional(100) 중복된 값이면 덮어쓰기 후 덮어쓰기 전 값 반환
// intSet = [2, 3, 4, 100]
✔️ 요소 확인
var intSet: Set = [4, 100, 2, 3]
intSet.isEmpty // 값이 비어있음? false
intSet.contains(2) // 2라는 정수가 있음? true
intSet.contains(1) // 1이라는 정수가 있음? false
✔️ 값 제거
var intSet: Set = [4, 100, 2, 3]
intSet.remove(3) // 삭제한 값 Optional(3) 반환
intSet.remove(1) // nil 반환 -> 값이 없기 때문
intSet.remove(4) // 삭제한 값 Optional(4) 반환
intSet.removeAll() // 전체 요소 제거
✔️ 집합연산
// 합집합
var setA: Set = [1, 2, 3] // 변수(var)로 선언. 값을 수정할거라 상수면 안되요.
let setB: Set = [3, 4, 5]
let copyA: Set = setA.union(setB) // 복제 union()
setA.formUnion(setB) // 원본값 수정 formUnion()
print(setA) // [1, 2, 3, 4, 5] 출력하면 원본값이 합집합 연산으로 인해 수정되었다.
// 교집합
var setC: Set = [1, 2, 3, 4, 5]
let setD: Set = [3, 4, 5, 6, 7]
let copyB: Set = setC.intersection(setD) // 복제 intersection()
setC.formIntersection(setD) // 원본값 수정 formIntersection()
print(setC) // [5, 3, 4] 값이 바뀌어있다.
// 대칭차
var setE: Set = [1, 2, 3, 4, 5]
let setF: Set = [3, 4, 5, 6, 7]
let copyC: Set = setE.symmetricDifference(setF) // 복제 symmetricDifference()
setE.formSymmetricDifference(setF) //원본값 수정 formSymmetricDifference()
print(setE) // [1, 2, 6, 7] 값이 바뀌어있다.
// 차집합
var setG: Set = [1, 2, 3, 4, 5]
let setH: Set = [3, 4, 5, 6, 7]
let copyD: Set = setG.subtracting(setH) // 복제 subtracting()
setG.subtract(setH) // 원본값 수정 subtract()
print(setG)
✔️ 포함관계 확인하기
let A: Set = [5, 10]
let B: Set = [5, 10, 15]
let C: Set = [3, 6, 9]
let D: Set = [5, 10]
// 부분집합
A.isSubset(of: B) // ture
B.isSubset(of: A) // false
// 상위 집합
A.isSuperset(of: B) // false
B.isSuperset(of: A) // true
// 같은 집합 / 서로수 집합
A.isDisjoint(with: C) // true 모든 요소가 동일
A.isDisjoint(with: D) // false 모든 요소가 다름
✔️ Apple 공식문서 참고
반응형
'Swift > 자료구조' 카테고리의 다른 글
[Swift] String 고수가 될거야 (0) | 2021.08.25 |
---|---|
[Swift] String Options에 대해서 알아보자. (0) | 2021.08.24 |
[Swift] Dictionary (0) | 2021.08.05 |
[Swift] for each 와 for in의 차이점 (0) | 2021.08.03 |
[Swift ] 소수점 다루기(ceil, floor, round, String format...) (0) | 2021.08.02 |
Comments