집단 자료형(Collective Types)
서로 관련이 있는 자료들을 모아서 관리하기 편하게 만든 것이 집단 자료형이다.
이때 서로 관련이 있다는 말은 자료형이 같거나 한 가지 주제에 속해있는(예를 들면 신체 정보 - 키, 몸무게, 나이 등) 자료들을 말한다.
집합 자료형의 종류는 다음과 같다.
• 배열(Arrays)
• 집합(Set)
• 딕셔너리(Dictionary, 사전)
이 중 집합(Set)을 알아보자.
집합(Set)
순서(인덱스)와 중복이 없는, 같은 타입만 저장할 수 있는 집단 자료형이다.
순서가 없기 때문에 1, 2, 3, 4, 5의 순서로 생성해도 순서가 뒤바뀔 수 있다.
또한 중복이 없어서 1, 1, 1, 1, 2 로 생성하면 1, 2 로 저장된다.
스위프트에서 집합의 특징은 다음과 같다.
• 중복이 불가능하다.
• 순서(인덱스, Index)가 없다.
• 집합에 사용될 자료형은 반드시 해시(Hash) 연산이 가능한 타입이어야 한다.
세번째 특징이 낮설게 느껴질 수 있지만 설명하자면,
집합은 내부적으로 해시(Hash) 연산의 결과값을 이용해 데이터를 저장한다.
따라서 집합에 저장할 데이터 타입은 반드시 해시 연산을 할 수 있어야 한다.
하지만 타입에 대해 따로 생각하지 않아도 되는데, 스위프트에서 제공해주는 모든 기본 타입은 해시 연산이 가능하기 때문이다.
선언 및 초기화
var set1 = Set<Int>()
var set1: Set<Int> = [1, 2]
var set1: Set = [1, 2] //타입 추론덕에 데이터의 자료형 생략 가능
데이터 추가
집합은 앞서 말했듯 순서 개념(인덱스; Index)이 없기 때문에
데이터를 추가하는 방법은 insert(_:)
함수 하나밖에 없다.
또한 집합 특성상 중복도 안돼서 중복되는 데이터를 넣어도 무시된다.
사용법은 단순히 괄호안에 넣고 싶은 값을 넣으면 된다.
var set1.insert(5) // 1,2,5
var set1.insert(1) // 1,2,5 이 순서는 편의상 오름차순으로 쓴것으로 실제 순서는 다를수도 있다.
데이터 삭제
데이터 추가와 마찬가지로 인덱스가 없기 때문에 remove(_:)
함수 하나밖에 없다.
괄호안에 넣은 값을 찾아 삭제할 값이 있다면 삭제하고 해당 값을 옵셔널로 반환한다. 값을 쓰고 싶으면 옵셔널을 벗겨야 한다.
없으면 nil을 반환한다.
arr1.remove(4) // Optional(4)
print(arr1) // 1, 2, 5
집합 연산
스위프트에는 수학에서의 집합 연산을 지원한다.
• union(_:) : 합집합
• intersection(_:) : 교집합
• subtracting(_:) : 차집합
• symmetricDifference(_:) : 대칭차집합
아래의 그림을 보면 이해가 쉽다.
let numbersOne: Set = [1, 2, 4, 5, 8]
let numbersTwo: Set = [1, 3, 5, 7, 9]
numbersOne.union(numbersTwo) // [1, 2, 3, 4, 5, 7, 8, 9]
numbersOne.intersection(numbersTwo) // [1, 5]
numbersOne.subtracting(numbersTwo) // [2, 4, 8]
numbersTwo.subtracting(numbersOne) // [3, 7, 9]
numbersOne.symmetricDifference(numbersTwo) // [2, 3, 4, 7, 8, 9]
스위프트 문법 - 집합(Set), swift
'공부 > Apple' 카테고리의 다른 글
[스위프트] 딕셔너리(Dictionary) 사용법 & 예시 (0) | 2023.07.08 |
---|---|
[스위프트] 튜플(Tuple) 사용법 & 예시 (0) | 2023.07.07 |
[스위프트] 배열(Arrays) 사용법 & 예시 (0) | 2023.07.03 |
[스위프트] 제어 전달문 (break, continue, return 특징 및 차이) (0) | 2023.07.03 |
[스위프트] 조건문(if, guard, switch) 종류와 사용법 (0) | 2023.07.03 |