자료구조 중 Set이라는 자료구조가 있는데 Dictionary와 유사한 특성을 가지고 있다. Dictionary가 키-값 쌍 데이터를 관리한다면 Set은 고유한 요소의 집합을 관리하는 데 사용된다
유니티에서는 HashSet<T>와 SortedSet<T>가 있으며 System.Collections.Generic 네임스페이스에 있는 제네릭 클래스이다
HashSet은 이름에서 유추할 수 있듯이 해시 테이블 기반의 집합 자료 구조이며, 요소의 중복을 허용하지 않고 빠른 검색, 삽입, 삭제의 기능을 제공한다
Dictionary와 비슷하게 저장되는 데이터에 순서가 없고 검색, 삽입, 삭제 시 평균적으로 O(1)의 빠른 시간 복잡도를 가진다
// 선언 + 기본 초기화
public HashSet<int> intSet = new HashSet<int>();
// 초기 용량 지정
public HashSet<int> intSet = new HashSet<int>(10);
집합에 데이터를 추가하는 함수. 이미 있는 데이터라면 false를 반환한다
intSet.Add(0);
집합에서 데이터를 제거하는 함수. 제거에 성공하면 true, 실패하면 false 반환
intSet.Remove(0);
집합에 해당되는 데이터가 있는지 확인하는 함수. bool 반환
intSet.Contains(1);
집합의 모든 요소를 제거하는 함수
현재 집합과 다른 컬렉션 other과의 합집합을 만든다
HashSet<int> set1 = new HashSet<int> {1, 2, 3};
HashSet<int> set2 = new HashSet<int> {2, 3, 4};
set1.UnionWith(set2);
// set1은 이제 {1, 2, 3, 4}
현재 집합과 다른 컬렉션 other과의 교집합을 만든다
set1.IntersectWith(set2);
// set1은 이제 {2, 3}
현재 집합과 다른 컬렉션 other과의 차집합을 만든다
set1.ExceptWith(set2);
// set1은 이제 {1}
현재 집합과 다른 컬렉션 other과의 대칭 차집합을 만든다
set1.SymmetricExceptWith(set2);
// set1은 이제 {1, 4}
현재 집합이 other로 지정된 컬렉션의 부분 집합인지 여부를 확인한다
bool isSubset = set1.IsSubsetOf(set2);
// false
현재 집합이 other로 지정된 컬렉션의 전체 집합인지 여부를 확인한다
bool isSuperset = set1.IsSupersetOf(set2);
// false
현재 집합과 other로 지정된 컬렉션이 겹치는지 여부를 확인한다. 하나라도 겹치면 True 반환
bool isOverlap = set1.IsSupersetOf(set2);
// true
현재 집합과 other로 지정된 컬렉션이 동일한지 여부를 확인함
bool isEqual = set1.SetEquals(set2);
// false
SortedDictionary와 비슷하게 정렬된 순서로 데이터를 유지할 수 있는 자료구조이며 해시테이블로 구현되는 HashSet과 달리 이진 탐색 트리(레드-블랙 트리)로 구현되어 검색, 삽입, 삭제에 O(log n)이 걸린다
함수는 HashSet과 매우 유사하므로 패스