C# 해시셋(HashSet)에 대해 알아보자!

2024. 3. 18. 20:56· C#/자료구조 이해하기
목차
  1. 1. 해시셋이란?
  2. 2. 해시셋을 사용해보자!

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
  1. 1. 해시셋이란?
  2. 2. 해시셋을 사용해보자!
'C#/자료구조 이해하기' 카테고리의 다른 글
  • C# 자료구조 그래프(Graph)에 대해 알아보자!
  • C# 자료구조 트리(Tree)에 대해 알아보자
  • C# object 데이터 타입과 값, 참조 형식을 알아보자!
  • C# 해시테이블(Hash table)에 대해 알아보자!
ForMan_
ForMan_
C# 언어로 프로그래머스 문제를 풀이하고, Unity 엔진으로 게임을 개발하며, 자료구조를 공부하는 과정을 반복문처럼 꾸준히 탐구하고 공유하는 '반복해서 노력하는 남자, ForMan'의 블로그입니다.
ForMan_
반복해서 노력하는 남자, ForMan
ForMan_
전체
오늘
어제
  • 분류 전체보기
    • C#
      • 프로그래머스 코딩 문제 풀이
      • 자료구조 이해하기
      • 알고리즘 기초 익히기
    • Unity
      • Unity 디자인 패턴
      • Unity 타워디펜스게임 프로젝트
      • Unity 물리기반 Merge게임 프로젝트(수박라..
      • Unity FPS게임 프로젝트(오버워치라이크)
    • UI
      • 젠레스존제로 UI작업 시작
      • 젠레스존제로 UI 이펙트 작업
      • 젠레스존제로 UI 사운드 작업
      • 젠레스존제로 UI 스크롤뷰 작업(메뉴창)

블로그 메뉴

  • 홈
  • 방명록
  • 태그

최근 글

최근 댓글

인기 글

태그

  • 동적프로그래밍
  • 유니티디자인패턴
  • Unity
  • 유니티
  • 오버워치만들기
  • 오버워치
  • c#
  • 과일합치기
  • 유니티게임
  • 코딩테스트
  • forman
  • 타워디펜스게임
  • 프로그래머스
  • 정렬알고리즘
  • 머쓱이
  • 유니티게임프로젝트
  • 오름차순
  • 완전탐색
  • 수박게임
  • 게임프로젝트
Thanks for Skin
hELLO · Designed By 정상우.v4.2.2
ForMan_
C# 해시셋(HashSet)에 대해 알아보자!
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.