C#

[C#]HashSet 반복문 사용 방법

DevStory 2022. 8. 23.

HashSet 반복문 사용 방법

HashSet은 값을 인덱스(Index)가 아닌 해시(Hash)로 관리합니다. 따라서, 인덱스를 사용하여 값을 접근할 수 없으며 HashSet 객체를 순회하기 위해 for문과 while문을 사용하는 것도 불가능합니다.

 

이번 포스팅은 HashSet에 반복문을 사용하여 각 요소를 접근하는 몇 가지 방법을 소개합니다.


방법 1. foreach문

C#은 배열 또는 컬렉션과 같은 데이터 집합을 반복할 수 있는 foreach문을 제공합니다.

 

for문을 사용하는 방법보다 간단하며, 인덱스를 사용하지 않는 HashSet을 순회하는 방법으로 가장 적합한 방법입니다.


예제 1. 기본 타입

다음 예제는 foreach문을 사용하여 HashSet의 각 요소를 출력합니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<string> hs = new HashSet<string>()
    {
      "AB", "CD", "EF", "GH"
    };

    Console.WriteLine("[hs의 데이터]");
    foreach (string strValue in hs)
    {
      Console.WriteLine(strValue);
    }
  }
}

[실행 결과]

[hs의 데이터]
AB
CD
EF
GH

예제 2. 사용자가 정의한 클래스 타입

다음 예제는 Person 타입인 HashSet을 foreach문을 사용하여 각 요소를 출력합니다.

public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}

class Program
{
  static void Main(string[] args)
  {
    HashSet<Person> hs = new HashSet<Person>()
    {
      new Person{Name="둘리", Age=10},
      new Person{Name="또치", Age=20},
      new Person{Name="짱구", Age=30}
    };

    Console.WriteLine("[hs의 데이터]");
    foreach (Person person in hs)
    {
      Console.WriteLine("Name: " + person.Name + ", Age: " + person.Age);
    }
  }
}

[실행 결과]

[hs의 데이터]
Name: 둘리, Age: 10
Name: 또치, Age: 20
Name: 짱구, Age: 30

방법 2. HashSet 클래스의 GetEnumerator 메서드

HashSet 클래스에서 제공하는 GetEnumerator() 메서드를 사용하여 HashSet을 순회할 수 있는 열거자(Enumerator)를 가져옵니다.

public HashSet<T>.Enumerator GetEnumerator();

열거자를 사용하여 HashSet을 순회할 수 있지만, HashSet의 데이터를 수정할 수는 없습니다.

 

foreach문 내부적으로 열거자를 사용하기 때문에 열거자를 직접 사용하는 것보다 foreach문을 사용하는 것이 좋습니다.

 

MoveNext() 메서드를 사용하여 HashSet의 다음 요소로 이동하며, 마지막 요소를 지난 경우 false를 반환합니다. 현재 값을 가져오기 위해 Current 프로퍼티를 사용합니다.

 

다음 예제는 열거자를 사용하여 HashSet의 각 요소를 출력합니다.

public class Person
{
  public string Name { get; set; }
  public int Age { get; set; }
}

class Program
{
  static void Main(string[] args)
  {
    HashSet<Person> hs = new HashSet<Person>()
    {
      new Person{Name="둘리", Age=10},
      new Person{Name="또치", Age=20},
      new Person{Name="짱구", Age=30}
    };

    HashSet<Person>.Enumerator em = hs.GetEnumerator();

    Console.WriteLine("[hs의 데이터]");
    while (em.MoveNext())
    {
      Person person = em.Current;
      Console.WriteLine("Name: " + person.Name + ", Age: " + person.Age);
    }
  }
}

[실행 결과]

[hs의 데이터]
Name: 둘리, Age: 10
Name: 또치, Age: 20
Name: 짱구, Age: 30
반응형

'C#' 카테고리의 다른 글

[C#]Stack 특정 값 존재하는지 확인하는 방법  (0) 2022.08.28
[C#]List 마지막 요소 제거  (0) 2022.08.28
[C#]HashSet 합치는 방법  (0) 2022.08.22
[C#]HashSet 초기화 방법  (0) 2022.08.21
[C#]HashSet 특정 값 가져오는 방법  (0) 2022.08.21

댓글