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

C# HashSet에서 지정된 요소 제거하는 방법 – Remove() 메서드 완벽 가이드

C#의 HashSet<T>에서 특정 요소를 제거하려면 Remove() 메서드를 사용합니다. 이 메서드는 컬렉션 내에 해당 요소가 존재하면 삭제하고 true를 반환하며, 존재하지 않으면 false를 반환합니다.

Remove() 메서드란?

HashSet<T>.Remove(T item)은 해시 집합에서 지정한 요소를 제거하는 메서드입니다. HashSet은 중복을 허용하지 않는 자료구조이므로, 이미 존재하는 요소를 다시 추가해도 한 번만 저장됩니다.

예제 1: 문자열 HashSet에서 요소 제거

다음 예제는 문자열 타입의 HashSet 두 개를 만들고, Remove() 메서드로 요소를 제거한 후 결과를 확인하는 코드입니다.

using System;
using System.Collections.Generic;
public class Demo {
   public static void Main(){
      HashSet<string> set1 = new HashSet<string>();
      set1.Add("AB");
      set1.Add("CD");
      set1.Add("EF");
      set1.Add("AB"); // 중복 요소는 저장되지 않음
      set1.Add("IJ");
      set1.Add("KL");
      set1.Add("EF"); // 중복 요소는 저장되지 않음
      set1.Add("OP");
      Console.WriteLine("HashSet1의 요소");
      foreach(string val in set1){
         Console.WriteLine(val);
      }
      HashSet<string> set2 = new HashSet<string>();
      set2.Add("EF");
      set2.Add("KL");
      Console.WriteLine("HashSet2의 요소");
      foreach(string val in set2){
         Console.WriteLine(val);
      }
      Console.WriteLine("HashSet2의 요소 개수 = " + set2.Count);
      // "KL" 요소 제거
      set2.Remove("KL");
      Console.WriteLine("\nHashSet2의 요소... (업데이트 후)");
      foreach (string res in set2){
         Console.WriteLine(res);
      }
      Console.WriteLine("HashSet2의 요소 개수 (업데이트 후) = " + set2.Count);
      Console.WriteLine("\nset1이 set2의 상위 집합인가? " + set1.IsSupersetOf(set2));
   }
}

실행 결과

HashSet1의 요소
AB
CD
EF
IJ
KL
OP
HashSet2의 요소
EF
KL
HashSet2의 요소 개수 = 2
HashSet2의 요소... (업데이트 후)
EF
HashSet2의 요소 개수 (업데이트 후) = 1
set1이 set2의 상위 집합인가? True

코드 설명

  • HashSet은 중복 값을 허용하지 않기 때문에 "AB"와 "EF"를 여러 번 추가해도 각각 한 번만 저장됩니다.
  • set2.Remove("KL") 호출로 "KL" 요소가 제거되고, 요소 개수가 2에서 1로 줄어듭니다.
  • IsSupersetOf() 메서드는 set1이 set2의 모든 요소를 포함하는지 확인하여 true를 반환합니다.

예제 2: 정수 HashSet에서 요소 제거

이번에는 정수 타입의 HashSet에서 숫자 요소를 제거하는 예제입니다.

using System;
using System.Collections.Generic;
public class Demo {
   public static void Main(){
      HashSet<int> set1 = new HashSet<int>();
      set1.Add(100);
      set1.Add(200);
      set1.Add(300);
      set1.Add(400);
      set1.Add(500);
      set1.Add(600);
      Console.WriteLine("HashSet의 요소");
      foreach(int val in set1){
         Console.WriteLine(val);
      }
      Console.WriteLine("HashSet의 요소 개수 = " + set1.Count);
      // 300 요소 제거
      set1.Remove(300);
      Console.WriteLine("\nHashSet의 요소... (업데이트 후)");
      foreach (int res in set1){
         Console.WriteLine(res);
      }
      Console.WriteLine("HashSet의 요소 개수 (업데이트 후) = " + set1.Count);
   }
}

실행 결과

HashSet의 요소
100
200
300
400
500
600
HashSet의 요소 개수 = 6
HashSet의 요소... (업데이트 후)
100
200
400
500
600
HashSet의 요소 개수 (업데이트 후) = 5

정리

  • Remove(T item): HashSet에서 지정한 요소를 제거합니다. 성공 시 true, 실패 시 false를 반환합니다.
  • Count 속성: 제거 후 요소 개수가 자동으로 감소합니다.
  • 중복 처리: HashSet은 중복 요소를 저장하지 않으므로 Add()를 반복 호출해도 고유한 값만 유지됩니다.
  • 참고로, 존재하지 않는 요소를 Remove()로 제거하려 하면 예외가 발생하지 않고 단순히 false를 반환하므로 안전하게 사용할 수 있습니다.