1. 해시셋이란?
- 해시셋은 딕셔너리와 해시테이블과 달리 키 따로 없고 밸류를 저장하는 컬렉션입니다. 해시테이블과 달리 데이터 타입을 명확히 써줘야 합니다. 또한 중복된 밸류를 허용하지 않으며, 리스트와 달리 순서가 따로 없습니다. 그래서 인덱스를 사용하여 접근할 수 없습니다.
- using.System.Collections.Generic; 으로 사용할 수 있습니다.
- 해시를 기반으로 값을 관리하기 때문에 값의 추가, 탐색, 제거 기능이 리스트보다 뛰어납니다.
2. 해시셋을 사용해보자!
1. Add(T item) - 추가
- 해시셋에 추가할 데이터를 Add를 통해 추가할 수 있습니다.
- 추가하려는 데이터 값이 이미 해당 해시셋에 존재하는 값일 경우 중복처리되어 추가되지 않습니다.
public void TestHashSet()
{
HashSet<string> hsColors = new HashSet<string>();
hsColors.Add("Red");
hsColors.Add("Blue");
hsColors.Add("Green");
hsColors.Add("Black");
hsColors.Add("Red"); //중복
foreach (string item in hsColors)
{
Debug.Log(item);
}
}
2. Remove(T item) - 제거
- 해시셋에 특정 값을 제거하는데 사용됩니다.
public void TestHashSet()
{
HashSet<string> hsColors = new HashSet<string>();
hsColors.Add("Red");
hsColors.Add("Blue");
hsColors.Add("Green");
hsColors.Add("Black");
hsColors.Remove("Black");
foreach (string item in hsColors)
{
Debug.Log(item);
}
}
3. UnionWith(다른 열거자) - 합집합
- 해당 해시셋과 다른 열거자(해시셋, 리스트 등)를 합칩니다. 단, 중복된 값이 존재한다면 하나로 저장되며, 또한 데이터 타입이 다르면 에러가 뜨면서 합쳐지지 않습니다.
public void TestHashSet()
{
HashSet<string> hsColors = new HashSet<string>();
hsColors.Add("Red");
hsColors.Add("Blue");
hsColors.Add("Green");
hsColors.Add("Black");
HashSet<string> hsOtherColors = new HashSet<string>();
hsOtherColors.Add("Orange");
hsOtherColors.Add("Yellow");
hsOtherColors.Add("Green");
hsOtherColors.Add("Black");
hsColors.UnionWith(hsOtherColors);
foreach (string item in hsColors)
{
Debug.Log(item);
}
}
4. IntersectWith(다른 열거자) - 교집합
- 해당 해시셋과 다른 열거자를 비교해서 중복된 값만 따로 저장합니다.
public void TestHashSet()
{
HashSet<string> hsColors = new HashSet<string>();
hsColors.Add("Red");
hsColors.Add("Blue");
hsColors.Add("Green");
hsColors.Add("Black");
HashSet<string> hsOtherColors = new HashSet<string>();
hsOtherColors.Add("Orange");
hsOtherColors.Add("Yellow");
hsOtherColors.Add("Green");
hsOtherColors.Add("Black");
hsColors.IntersectWith(hsOtherColors);
foreach (string item in hsColors)
{
Debug.Log(item);
}
}
5. ExceptWith(다른 열거자) - 차집합
- 해시셋과 다른 열거자를 비교해서 중복된 값의 나머지 값을 저장합니다.
public void TestHashSet()
{
HashSet<string> hsColors = new HashSet<string>();
hsColors.Add("Red");
hsColors.Add("Blue");
hsColors.Add("Green");
hsColors.Add("Black");
HashSet<string> hsOtherColors = new HashSet<string>();
hsOtherColors.Add("Orange");
hsOtherColors.Add("Yellow");
hsOtherColors.Add("Green");
hsOtherColors.Add("Black");
hsColors.ExceptWith(hsOtherColors);
foreach (string item in hsColors)
{
Debug.Log(item);
}
}
7. FirstOrDefault() - 변수에 특정 값 할당
- FirstOrDefault()는 데이터 집합에서 특정 조건을 만족하는 첫 번째 위치의 데이터를 가져옵니다.
- 조건에 맞는 값이 없는 경우 해당 타입의 Default 값을 반환합니다(int -> 0, string -> null(아무것도 안찍힘)).
- Linq에서 제공하는 매서드이기 때문에 using.System.Linq; 를 써줘야 사용가능합니다.
public void TestHashSet()
{
HashSet<string> hsColors = new HashSet<string>();
hsColors.Add("Red");
hsColors.Add("Blue");
hsColors.Add("Green");
hsColors.Add("Black");
string found = hsColors.FirstOrDefault(color => color == "Green");
Debug.Log("found = " + found);
string found2 = hsColors.FirstOrDefault(color => color == "Pink");
Debug.Log("found2 = " + found2);
}
8. Where() - 특정 조건의 다수의 데이터를 전달
- 해시셋에 특정 조건에 맞는 데이터들을 해당 변수에 전달합니다. 리스트로 예를 들어보겠습니다.
- 숫자로 된 데이터를 전달할 때 유용합니다.
public void TestHashSet()
{
HashSet<int> hsNum = new HashSet<int>()
{
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
};
List<int> numList = hsNum.Where(num => num <= 5).ToList();
foreach (int item in numList)
{
Debug.Log(item);
}
}
'C# > 자료구조 이해하기' 카테고리의 다른 글
C# 자료구조 그래프(Graph)에 대해 알아보자! (0) | 2024.03.26 |
---|---|
C# 자료구조 트리(Tree)에 대해 알아보자 (0) | 2024.03.26 |
C# object 데이터 타입과 값, 참조 형식을 알아보자! (0) | 2024.03.13 |
C# 해시테이블(Hash table)에 대해 알아보자! (0) | 2024.03.13 |
C# 연결리스트(Linked List)에 대해 알아보자! (0) | 2024.03.13 |