수학에서 사용하는 집합과 동일한 기능(교집합, 차집합 등...)을 제공하는 컬렉션 타입입니다.
세트(Set)는 데이터의 순서를 고려하지 않으며, 데이터는 중복을 허용하지 않습니다.(세트안에 중복 값이 있으면 1개의 값으로 취급)
세트안에 들어가는 데이터는 Hashable 프로토콜을 채택한 자료형(Swift의 기본 자료형 등...)만 저장할 수 있다.(Hashble한 타입: 값의 고정된 길이와 유일성을 보장해주는 타입)
✅ 빈 세트 만들기
var st1 = Set<Int>() var st2: Set<Int> = []
세트는 순서를 고려하지 않는 컬렉션 타입이기 때문에 append(), insert()
같은 메서드는 존재하지 않습니다.
대신 update(with: 값)
메서드를 사용하여 데이터를 추가합니다.
✅ 세트에 데이터 추가
st.update(with: 1) //세트에 값 1 추가
✅ 세트의 데이터 삭제
st.remove(1) // 데이터 1 삭제 st.removeAll() // 모든 데이터 삭제
세트는 배열의 인덱스(index), 또는 딕셔너리의 키(key)처럼 데이터를 지목할 수 있는 기능이 없기 때문에 첨자(subscript)를 활용하여 데이터에 접근하는 것이 불가능합니다.
세트에서도 정렬이 가능하지만, 정렬할 때는 세트(Set)에서 배열(Array)로 전환되어 반환됩니다.
또한 세트는 순서가 없는 컬렉션 타입이기 때문에 원본을 변경하는 정렬 기능은 없습니다.
✅ 세트의 데이터 정렬
st.sorted() // 오름차순 st.sorted(by: <) // 오름차순 st.sorted(by: >) // 내림차순
세트에 할당된 데이터의 최대/최소값을 알고 싶을 때는 max(), min()
메서드를 사용합니다.
세트의 최대/최소값 메서드를 사용하면 반환 값을 Optional(옵셔널) 타입으로 받게 됩니다. 이는 빈 세트의 가능성 때문입니다. (빈 세트에 max(), min()
메서드를 사용하면 nil이 출력)
✅ 세트의 최대/최소값
st.max() // 최대값 st.min() // 최소값
Swift에서 세트(Set)는 유일하게? 집합 연산 메서드를 지원하는 타입입니다.
대표적인 집합 연산 메서드로는 아래와 같습니다.
✅ 합집합
st1.union(st2) //st1세트와 st2세트를 합친결과를 return
✅ 교집합
st1.intersection(st2) //st1세트와 st2세트의 공통부분을 return
✅ 차집합
st1.subtracting(st2) //합집합에서 교집합을 뺀 부분을 return
✅ 여집합
st1.symmetricDifference(st2) //st1세트에서 st2세트를 뺀 결과를 return