C#의 HashSet은 배열이나 컬렉션에 포함된 중복된 문자열 또는 요소를 자동으로 제거해 주는 최적화된 집합(Set) 컬렉션입니다. 내부적으로 해시 테이블 기반 구조를 사용하기 때문에 요소 추가, 삭제, 검색 작업이 매우 빠르며, 고유한 값만 저장해야 하는 상황에서 특히 유용하게 활용됩니다.
아래 예제를 통해 C# HashSet을 사용하여 문자열 배열에서 중복 요소를 제거하는 방법을 살펴보겠습니다. 먼저 중복된 요소가 포함된 배열을 준비합니다.
예제 코드
using System;
using System.Collections.Generic;
using System.Linq;
class Program {
static void Main() {
string[] arr1 = {
"bus",
"truck",
"bus",
"car",
"truck"
};
Console.WriteLine(string.Join(",", arr1));
// HashSet 생성
var h = new HashSet<string>(arr1);
// 중복 단어 제거
string[] arr2 = h.ToArray();
Console.WriteLine(string.Join(",", arr2));
}
}실행 결과
bus,truck,bus,car,truck bus,truck,car
실행 결과를 보면 원본 배열에는 "bus"와 "truck"이 각각 두 번씩 포함되어 있었지만, HashSet을 거친 후에는 각 요소가 한 번씩만 남아 있는 것을 확인할 수 있습니다.
HashSet 선언 및 사용 방법
HashSet은 다음과 같이 선언합니다. 제네릭 타입 매개변수에 저장할 요소의 형식을 지정합니다.
var h = new HashSet<string>(arr1);
배열의 요소들을 HashSet에 담으면 중복된 값은 자동으로 걸러집니다. 이후 ToArray() 메서드를 호출하면 중복이 제거된 요소들을 다시 배열 형태로 변환할 수 있습니다.
string[] arr2 = h.ToArray();
HashSet의 주요 특징
- 중복 허용 안 함: 동일한 값을 여러 번 추가해도 하나만 저장됩니다.
- 빠른 성능: 해시 기반 구조 덕분에 Add, Remove, Contains 연산이 평균 O(1) 시간 복잡도로 처리됩니다.
- 순서 미보장: 요소의 저장 순서가 유지되지 않으므로 순서가 중요한 경우에는 List와 함께 사용하는 것이 좋습니다.
이처럼 HashSet은 중복 제거뿐 아니라 두 집합 간의 교집합, 합집합, 차집합 연산에도 활용할 수 있는 강력한 컬렉션이므로, 데이터 정리나 빠른 조회가 필요한 다양한 상황에서 적극적으로 사용해 보시기 바랍니다.