C#

[C#]HashSet 초기화 방법

DevStory 2022. 8. 21.

HashSet 초기화 방법

이번 포스팅은 C#의 HashSet 객체를 초기화하는 몇 가지 방법을 소개합니다.


방법 1. null(권장하지 않음)

HashSet 객체를 null로 초기화할 수 있습니다.

 

null로 초기화하는 경우 HashSet 클래스에서 제공하는 메서드 및 프로퍼티를 사용할 수 없으므로 null로 초기화하는 방법은 권장하지 않습니다.

 

다음 예제는 null로 초기화된 HashSet 객체에서 HashSet 클래스에서 제공하는 Add() 메서드를 호출했을 때, 런타임 에러가 발생하는 것을 보여줍니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs = null;
    hs.Add(10);
  }
}

[에러 내용]


방법 2. 기본 생성자 함수

기본 생성자 함수인 new HashSet<T>()를 사용하여 HashSet 객체를 초기화할 수 있습니다.

 

T는 HashSet의 데이터 타입을 의미합니다.

 

다음 예제는 데이터가 int 타입인 HashSet 객체를 기본 생성자 함수로 초기화 후 Add() 메서드를 사용하여 데이터를 추가하고 Count 프로퍼티로 데이터의 개수를 출력합니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs = new HashSet<int>();

    hs.Add(10);
    hs.Add(20);

    Console.WriteLine("hs.Count: " + hs.Count);
  }
}

[실행 결과]

hs.Count: 2

방법 3. 데이터 할당

HashSet 객체를 초기화하면서 데이터를 할당하고 싶은 경우 생성자 함수 뒤에 중괄호를 사용합니다.


예제 1. 기본 타입

다음 예제는 데이터가 int 타입인 HashSet 객체를 초기화하면서 1부터 5까지 값을 할당합니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs = new HashSet<int>()
    {
      1, 2, 3, 4, 5
    };

    Console.WriteLine("hs.Count: " + hs.Count);
  }
}

[실행 결과]

hs.Count: 5

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

HashSet 객체의 데이터 타입이 기본 타입이 아닌 사용자가 정의한 클래스인 타입인 경우 중괄호에 해당 타입의 객체를 할당합니다.

 

다음 예제는 데이터가 Person 타입인 HashSet 객체를 초기화하면서 Person 객체를 할당합니다.

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}
    };

    foreach(Person person in hs)
    {
      Console.WriteLine("Name: " + person.Name + ", Age: " + person.Age);
    }
  }
}

[실행 결과]

Name: 둘리, Age: 10
Name: 또치, Age: 20
Name: 고길동, Age: 30

방법 4. 다른 HashSet 또는 List를 생성자 함수에 전달

HashSet 생성자 함수는 오버로드된 다양한 버전이 존재합니다.

 

생성자 함수에 다른 HashSet 객체 또는 List를 전달하여 초기화할 수 있습니다.

 

다음 예제는 HashSet 생성자 함수에 List를 전달합니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs = new HashSet<int>(new List<int>() { 1, 2, 3, 4, 5});

    foreach(int num in hs)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

1 2 3 4 5

방법 5. 비교자 전달

HashSet 생성자 함수에 비교자를 전달할 수 있습니다.

 

HashSet은 중복되는 값을 가질 수 없습니다.

 

하지만, HashSet의 문자열 기본 비교자는 대소문자를 구분하므로 다음 예제처럼 대소문자가 다른 문자열을 할당할 수 있습니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<string> hs = new HashSet<string>()
    {
      "AA", "aA", "Aa", "aa"
    };

    foreach(string strValue in hs)
    {
      Console.WriteLine(strValue);
    }
  }
}

[실행 결과]

AA
aA
Aa
aa

HashSet의 데이터가 대소문자 구분 없이 할당되어야 하는 경우 문자열 비교자 클래스인 StringComparer의 CurrentCultureIgnoreCase 프로퍼티를 전달합니다.

 

다음 예제는 문자열 비교자를 HashSet 생성자 함수에 전달하므로 하나의 문자열만 HashSet에 할당됩니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<string> hs = new HashSet<string>(StringComparer.CurrentCultureIgnoreCase)
    {
      "AA", "aA", "Aa", "aa"
    };

    foreach(string strValue in hs)
    {
      Console.WriteLine(strValue);
    }
  }
}

[실행 결과]

AA
반응형

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

[C#]HashSet 반복문 사용 방법  (0) 2022.08.23
[C#]HashSet 합치는 방법  (0) 2022.08.22
[C#]HashSet 특정 값 가져오는 방법  (0) 2022.08.21
[C#]HashSet 특정 값 삭제 방법  (0) 2022.08.21
[C#]HashSet 데이터 추가하는 방법  (0) 2022.08.21

댓글