아리의 iOS 탐구생활

[Swift] Set이란? 값 변경, 집합연산, 포함관계 본문

Swift/자료구조

[Swift] Set이란? 값 변경, 집합연산, 포함관계

Ari Lee 2021. 8. 11. 17:09
반응형
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 공식문서 참고

 

Collection Types — The Swift Programming Language (Swift 5.5)

Collection Types Swift provides three primary collection types, known as arrays, sets, and dictionaries, for storing collections of values. Arrays are ordered collections of values. Sets are unordered collections of unique values. Dictionaries are unordere

docs.swift.org

 

반응형
Comments