본문 바로가기

C#/기본적인 팁

딕셔너리와 비슷하지만 '키' 부분만 저장하고 '값'을 저장하지 않는 HashSet<T> 클래스

딕셔너리를 사용할 때 키가 딕셔너리에 저장돼 있는지 여부가 중요하고 그 값은 중요하지 않을 때가 있다.

 

예를 들어 중복되지 않는 단어 목록을 작성하고 싶을 때 단어를 '키'로 저장하고, '값'에는 저장하고 싶은 정보가 없어 따로 필요하지 않다.

 

이 경우에 List<string>에 저장하는 방법도 있지만 새로운 단어를 저장할 때 리스트에 중복되는 단어가 있는지 리스트 전체 내용을 읽고 판단한 후 저장해야 하기에 이 방법은 효율적이지 않다.

 

이럴 때 딕셔너리와 비슷한 HashSet<T> 클래스를 사용하면 된다.

 

HashSet<T> 클래스는 Dictionary<TKey, TValue>와 비슷하지만 키 부분만 저장하고 값은 저장하지 않는다는 점이 다르다.

 

중복을 허용하지 않는 요소의 집합을 나타내는 클래스이다.

var wordsList = new HashSet<string>();
wordsList.Add("apple");
bool result = wordsList.Add("apple");    //중복되는 값을 저장해도 예외가 발생하지 않고 false를 반환.

 

 

HashSet<T>에 있는 Add 메서드는 요소가 HashSet<T> 객체에 추가되면 true를 반환하고 요소가 이미 존재하는 경우에는 예외를 발생시키지 않고 false를 반환한다.

 

따라서 요소가 이미 존재하는지에 대해 신경 쓰지 않고 요소를 추가할 수 있다