Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# HashSet이란? Set 컬렉션으로 배열 중복 요소 제거하기


C#의 HashSet은 배열이나 컬렉션에서 중복된 문자열 또는 요소를 자동으로 제거해 주는 집합(Set) 컬렉션입니다. 내부적으로 해시 테이블 기반으로 구현되어 있어 요소의 검색, 삽입, 삭제 속도가 매우 빠르며, 항상 고유한(unique) 값만 저장한다는 특징이 있습니다.

HashSet으로 문자열 중복 제거하기

다음 예제는 C# HashSet을 사용하여 문자열 배열에서 중복된 단어를 제거하는 방법을 보여줍니다.

예제 코드

using System;
using System.Collections.Generic;
using System.Linq;

class Program {
   static void Main() {
      string[] arr1 = {
         "one",
         "two",
         "two",
         "one",
         "three"
      };

      Console.WriteLine(string.Join(",", arr1));

      // HashSet 생성
      var h = new HashSet<string>(arr1);

      // 중복 단어 제거 후 배열로 변환
      string[] arr2 = h.ToArray();

      Console.WriteLine(string.Join(",", arr2));
   }
}

HashSet 선언 방법

HashSet은 아래와 같이 선언합니다. 제네릭 타입 매개변수에 저장할 요소의 자료형을 지정하고, 생성자에 배열을 전달하면 됩니다.

var h = new HashSet<string>(arr1);

생성자에 배열을 넘기면 HashSet이 자동으로 중복된 값을 걸러냅니다. 이후 ToArray() 메서드를 호출하면 중복이 제거된 요소들을 다시 배열 형태로 얻을 수 있습니다.

string[] arr2 = h.ToArray();

실행 결과

one,two,two,one,three
one,two,three

HashSet의 주요 특징

  • 중복 허용 안 함: 동일한 값을 여러 번 추가해도 한 번만 저장됩니다.
  • 빠른 성능: 해시 기반 구조 덕분에 검색·삽입·삭제가 평균 O(1)의 시간 복잡도로 처리됩니다.
  • 순서 미보장: 요소의 저장 순서가 유지되지 않으므로 순서가 중요하다면 List 사용을 고려해야 합니다.
  • Add / Remove 메서드: Add()로 요소를 추가할 수 있으며(중복 시 false 반환), Remove()로 요소를 삭제할 수 있습니다.