Set은 콜렉션에 순서와 상관없이 같은 타입의 다른 값을 저장합니다. 아이템의 순서가 중요하지 않거나 아이템이 중복되면 안될 때 배열 대신에 Set을 사용할 수 있습니다.
Set은 집합 컬렉션이라고 이해하면 편하다, 실제로 지원하는 기능들도 집합에서 사용하는 기능들을 제공한다.
컬렉션 타입이다 따라서 구조체로 Stack메모리에 저장된다.
set은 배열과 비슷하지만 배열은 데이터의 나열, 연속이라는 느낌이라면, set은 집합의 느낌에 가깝다.
(실제로 지원하는 메소드도 집합에서 자주 사용되는 메소드들이 있음)
배열과 다르게 중복을 허용하지 않는다.
hashable프로토콜을 준수하여야 하기에 hashable타입의 데이터만 저장이 가능하다
hash를 통해서 데이터를 저장한다, 즉 빠르다
저장되는 자료형은 모두 같은 자료형이어야 한다.
var set01: Set<Int> = [] // 빈 set생성
var set02: Set = [1,2,3,4] //타입추론은 가능하다(Any키워드는 사용불가)
var set03 = Set<Int>() //생성자로 set생성 (set은 구조체로 저장된다.)
set은 배열처럼 축약된 형태의 생성을 지원하지 않는다.
.isEmpty
-> Set이 비어있는지 확인(Bool값을 반환)
.contains(Element)
.isContain(Element)
원하는 원소가 set안에 존재하는지 확인(Bool타입)
==
두 set이 동일한 원소를 갖는 set인지 확인
.capacity
Set이 가질 수 있는 요소의 개수, 넘어가면 swift에서 자동으로 확장
Set의 최대 최소 원소를 반환한다.
.min()
.max()
.sorted() // 데이터를 정렬해서 반환
.shuffled() // 데이러틑 섞어서 반환(원래 set은 순서가 없다만 런타임에서 다시한번 섞어야 할일이 생긴다면 샤용)
.insert(Element)
.update(with: Element)
.filter()
주어진 조건에 맞는 요소(들)을 포함하는 새로운 집합을 반환한다.
.remove()
.removeFirst()
.remove(at: Index)
.removeAll()
.isSubset(of: 범위지정자 or 배열 or set)
.isSuperset(of: )
.intersection(배열 or Set)
.isStrictSubset(of:)
.isStrictSuperset(of:)
//두 집합의 공통된 원소를 갖고 있는지 확인
.isDisjoint(with:)
union(:) //두개의 set을 합쳐서 새로운 set생성, 반환
intersection(:) // 공통된 요소만으로 구성된 set생성, 반환
.first
-> 첫번째 요소 가져옴
//랜덤
.randomElement()
.randomElement(using: inout T) -> 주어진 조건에 맞는 난수의 요소를 가져온다.