C#컬렉션과 LINQ

HashSet 기본

중복 없는 집합과 빠른 포함 여부 검사를 다룰 때 유용한 `HashSet<T>` 기본 패턴을 정리합니다.

마지막 수정 2026년 3월 19일

기본 패턴

csharp
var tags = new HashSet<string> { "csharp", "dotnet" };
tags.Add("linq");
bool hasDotnet = tags.Contains("dotnet");

설명

  • HashSet<T>는 순서보다 "중복 없음"과 "빠른 포함 검사"가 중요할 때 잘 맞습니다.
  • 같은 값을 여러 번 추가해도 한 번만 유지됩니다.
  • 태그 집합, 방문 기록, 허용 목록처럼 membership test가 중요한 문제에서 유용합니다.
  • 집합 연산인 UnionWith, IntersectWith, ExceptWith도 기본 제공됩니다.

짧은 예제

csharp
var visited = new HashSet<int>();

visited.Add(101);
visited.Add(102);
visited.Add(101);

Console.WriteLine(visited.Count);      // 2
Console.WriteLine(visited.Contains(102));

빠른 정리

항목설명
Add집합에 값 추가
Contains값 존재 여부 확인
중복 제거같은 값은 한 번만 유지
Count현재 원소 수
집합 연산합집합, 교집합, 차집합 지원

주의할 점

HashSet<T>는 삽입 순서를 보장하지 않습니다. 순서가 중요하면 List<T>나 다른 구조와 역할을 분리해서 써야 합니다.