저번에는 배열에 대해 알아봤었는데,
이번엔 Set에 대해서 알아보려고 합니다!
Swift Set은 집합(set)을 나타내는 자료형으로,
배열(Array)과는 다르게 순서가 없고 중복된 값을 가지지 않습니다.
이러한 특성으로 인해 Set은 데이터의 고유성을 유지하고 검색과 필터링에 유용합니다.
Set의 생성과 기능
// 빈 Set 생성
var mySet = Set<Int>()
// 값이 있는 Set 생성
var mySet: Set = [1, 2, 3, 4, 5]
Set의 기본적인 생성은 이렇습니다.
Set에는 아래와 같은 아주우 유용한 여러 가지 메서드가 있습니다.
- insert(_:) : Set에 값을 추가합니다.
- remove(_:) : Set에서 값을 제거합니다.
- contains(_:) : Set에 특정 값이 포함되어 있는지 확인합니다.
- count : Set에 저장된 값의 개수를 반환합니다.
- union(_:) : 두 개의 Set을 합칩니다.
- intersection(_:) : 두 개의 Set에서 공통된 값을 추출합니다.
- subtracting(_:) : 첫 번째 Set에서 두 번째 Set에 포함된 값을 제거합니다.
var mySet: Set = [1, 2, 3, 4, 5]
mySet.insert(6) // [1, 2, 3, 4, 5, 6]
mySet.remove(4) // [1, 2, 3, 5, 6]
if mySet.contains(3) {
print("3을 포함합니다!")
} else {
print("3을 포함하지 않습니다!")
}
let otherSet: Set = [2, 3, 4, 7]
let unionSet = mySet.union(otherSet) // [1, 2, 3, 4, 5, 6, 7]
let intersectionSet = mySet.intersection(otherSet) // [2, 3]
let subtractedSet = mySet.subtracting(otherSet) // [1, 5, 6]
Set의 여러가지 메서드를 사용한 예시입니다.
for value in mySet {
print(value)
}
배열과 마찬가지로 for - in 구문을 통해서 Set의 데이터들을 출력할 수 있습니다.
위에서 Set은 배열과 다르게 정렬되어 있지 않다(순서가 없다)고 했었죠?
let sortedArray = mySet.sorted()
그래서 정렬이 된 배열로 바꾸고 싶다! 하시면 이런 식으로 사용하시면 되겠습니다.
정리
장점
- Set은 중복된 값을 허용하지 않기 때문에 데이터의 고유성을 보장합니다.
- Set은 검색과 필터링에 유용합니다. 배열(Array)과는 달리 Set은 값이 중복되지 않는다는 특성 때문에 값 검색이 빠르고 쉽습니다.
- Set은 고유한 값의 집합을 나타내기 때문에 수학적인 집합 연산을 지원합니다.
단점
- Set은 값이 정렬되어 있지 않습니다. 따라서 값을 순서대로 가져와야 하는 경우, Set을 정렬된 배열(Array)로 변환해야 합니다.
- Set에 값을 추가하거나 삭제할 때, 값의 위치가 바뀔 수 있습니다(정렬되어 있지 않기 때문!). 따라서 Set은 순서가 중요한 데이터를 다루는 데 적합하지 않습니다.
- Set은 값에 빠르게 접근할 수 있지만, 인덱스를 사용하여 특정 위치의 값을 직접 가져오는 것은 불가능합니다. 따라서 특정 값을 찾으려면 Set을 반복해야 합니다.
그렇게 때문에 상황에 맞게 Array를 사용할지, Set을 사용할지 판단해서 코드를 작성하시면 되겠습니다!
'iOS > 자료구조' 카테고리의 다른 글
swift - Collection Types(1) Array (선언 / 추가 / 삭제 / 접근 / 정렬) (2) | 2022.12.14 |
---|