이번 글에서는 Set에 대하여 알아보겠습니다. Swift에서의 데이터를 관리하는 타입 중 하나인 Set은 Dictionary와 같이 데이터의 순서를 보장할 수는 없지만 중복을 허용하지 않는다는 기능을 가지고 있습니다.
간단히 예를 보시면서 하나하나 어떻게 사용하는지 한번 알아보겠습니다.
1. 생성
우선 생성 방법은 다른 Array나 Dictionary와 비슷합니다.
다만 변수의 타입을 Set으로 설정한 후에는 초기 설정이 필요함으로 주의해주시면 됩니다.
// 초기 설정 없이 생성
var setTest = Set<Int>()
var setTest1: Set<Int> = []
var setTest2: Set = [] // Hashable 데이터 타입을 설정해 주어야 합니다.
// 초기 설정 동시에 생성
var setTest1: Set<Int> = [1,2,3,4,5]
var setTest2: Set = [1,2,3,4,5]
2. Hashable 타입
Set 에서는 Hashable 데이터 타입만을 허용하고 있습니다.
- 가능한 타입
- Bool
- Int
- Double
- Float
- Character
- String 등
- 불가능한 타입
- Class
- Array
- Dictionary 등
3. 간단한 조작
Set 의 조작에 대해서는 크게 삽입, 삭제, 체크, 정렬 정도가 있습니다.
var setTest = Set<Int>()
// 삽입
setTest.insert(1)
setTest.insert(10)
setTest.insert(100)
setTest.insert(10) // 중복
// [1, 10, 100]
// 삭제
setTest.remove(1)
// [10, 100]
// 체크
setTest.contains(10)
// true
// 정렬
setTest.sorted()
// [10, 100]
// Set은 기본적으로 데이터들의 순서를 보장할 수 없기 때문에 순서대로 출력이 필요할 경우 사용하게 됩니다.
4. Set만의 기능
Set에는 집합과도 같은 기능을 제공합니다.
중복을 허용하지 않는 것을 제외하고 Set을 사용하게 되는 이유 중에 하나이지 않을까 합니다.
let aSet: Set = [1,3,5,7,9]
let bSet: Set = [2,4,5,7,10]
// 교집합
aSet.intersection(bSet)
// [5,7]
// 교집합의 여집합
aSet.symmetricDifference(bSet)
// [1,2,3,9,10]
// 합집합
aSet.union(bSet)
// [1,2,3,5,7,9,10]
// 차집합
aSet.subtracting(bSet)
// [1,3,9]
다음 기능은 부분집합인지 아닌지 확인하는 기능입니다.
공식 사이트에는 Set Membership and Equality 라고 설명이 되어 있습니다.
let twoSet: Set = [2,4,6,8,10,12,14,16,18]
let sixSet: Set = [6,12,18]
let eightSet: Set = [8,16]
let threeSet: Set = [3,6,9]
// Super
twoSet.isSuperset(of: sixSet) // true
twoSet.isSuperset(of: eightSet) // true
// Sub
sixSet.isSubset(of: twoSet) // true
eightSet.isSubset(of: twoSet) // true
// Sub false
eightSet.isSubset(of: sixSet) // false
// disjoint
eightSet.isDisjoint(with: threeSet) // true
5. 마무리
이번 글에서는 간단히 Swift의 기능인 Set 에 대하여 알아보았습니다.
Array나 Dictionary를 통해서도 충분히 로직을 구현할 수 있지만 저도 여러 가지 알고리즘을 풀어가면서 Set의 중요성을 알게 되었습니다.
이번 글을 통해 많은 도움이 되었으면 좋겠습니다.
감사합니다.
출처: 공식 사이트 도큐먼트
https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html
환경
Xcode 11.3.1
Swift 5
'Swift > 정보 공유' 카테고리의 다른 글
[Swift] DispatchTimer를 사용해보자! (0) | 2020.06.05 |
---|---|
[Swift] MapView를 클릭했을 때 해당 위치의 주소를 알아내보자! (0) | 2020.05.25 |
[Swift] Swift - 싱글톤 패턴(Singleton) (0) | 2020.05.08 |
[Swift] UICollectionView에 .xib커스텀 셀을 적용해보기 (0) | 2020.03.15 |
[Swift] 문자열의 인코딩 (0) | 2020.02.23 |