나의 발자취
스위프트 컬렉션(3) Set 본문
Dictonary처럼 Set도 hashable해야한다. 그렇기때문에 정렬속도보다 검색속도가 빠른 경우에 사용할 수 있다.
집합의 성질을 이용한다.
- Set의 문법 약속
- 생김새는 배열과 같음(따라서, 생성시 타입을 선언 해야함)
- 수학에서의 집합과 동일하기 때문에 요소는 유일해야함(순서가 존재하지 않음)
타입 표기
// 단축문법
let set1: Set = [1, 2, 3]
// 정식문법
let set2: Set<Int> = [1, 2, 3]
빈 set 생성
let emptySet: Set<Int> = []
let emptySet1 = Set<Int>()
기본 기능
set.count
set.isEmpty
set.contains(1)
set.randomElement()
업데이트 (update) - 삽입하기 / 교체하기 / 추가하기
// 서브스크립트 관련 문법 없음 ⭐️
// (정식 기능) 함수 문법
set.update(with: 1) // Int 타입을 반환(기존에 값이 있었다면)
set.update(with: 7) // 새로운 요소가 추가되면 nil 타입을 반환
//:> Set는 append 함수를 제공하지 않음
// append는 순서가 있는 컬렉션의 끝에 추가하는 개념
// Set은 순서가 없기 때문에, update를 통해서 추가
삭제(제거)하기 (remove)
var stringSet: Set<String> = ["Apple", "Banana", "City", "Swift"]
// 요소 삭제해 보기
stringSet.remove("Swift") // "Swift" 삭제한 요소를 리턴
stringSet // ["Hello", "Apple"]
// 존재하지 않는 요소를 삭제해보기
stringSet.remove("Steve") // nil (에러는 발생하지 않음)
// 전체요소 삭제
stringSet.removeAll()
stringSet.removeAll(keepingCapacity: true)
Set의 활용
* 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]
var d: Set = [1, 7, 5, 9, 3]
* Set의 비교
a == b
a != b
//Set(정렬되지 않은 컬렉션)은 어차피 순서는 중요하지 않음
b == d // 항상 true
부분집합 / 상위집합 / 서로소
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9] // 홀수 모음
c = [2, 4, 6, 8, 10] // 짝수 모음
d = [1, 7, 5, 9, 3] // 홀수 모음
부분집합 여부
b.isSubset(of: a) // true, 부분집합 여부
b.isStrictSubset(of: a) // false, 진부분집합 여부
상위집합
a.isSuperset(of: b) // true 상위집합 여부
a.isStrictSuperset(of: b) // false 진상위집합 여부
서로소 여부
d.isDisjoint(with: c)
* 합집합
a = [1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [1, 3, 5, 7, 9]
c = [2, 4, 6, 8, 10]
d = [1, 7, 5, 9, 3]
var unionSet = b.union(c)
// b.formUnion(c) // 원본 변경
* 교집합
var interSet = a.intersection(b)
// a.formIntersection(b) // 원본 변경
* 차집합
var subSet = a.subtracting(b)
// a.subtract(b) // 원본 변경
* 대칭차집합
var symmetricSet = a.symmetricDifference(b)
// a.formSymmetricDifference(b) // 원본변경
* 반복문과의 결합
let iteratingSet: Set = [1, 2, 3]
for num in iteratingSet { // 정렬되지 않은 컬렉션이기 때문에, 실행할때마다 순서가 달라짐
print(num)
}
* 기타 유의점
var newSet: Set = [1, 2, 3, 4, 5]
var newArray: Array = newSet.sorted()
-> Set을 정렬하면, 배열로 리턴함 (정렬은 순서가 필요하기 때문)
'앱 개발 > iOS' 카테고리의 다른 글
열거형 (0) | 2022.05.27 |
---|---|
컬렉션 관련 이론: KeyValuePairs, Copy-On-Write 최적화 (0) | 2022.05.26 |
스위프트 컬렉션(2) 딕셔너리 (0) | 2022.05.25 |
스위프트 컬렉션 (1) 배열 (0) | 2022.05.25 |
함수와 옵셔널타입 (0) | 2022.05.24 |