C#

[C#]HashSet 합치는 방법

DevStory 2022. 8. 22.

HashSet 합치는 방법

이번 포스팅은 두 개의 HashSet을 합치는 몇 가지 방법을 소개합니다.


방법 1. HashSet의 UnionWith 메서드

HashSet 클래스에서 제공하는 UnionWith() 메서드를 사용하여 두 개의 HashSet을 합칠 수 있습니다.

public void UnionWith(IEnumerable<T> other);

A와 B라는 두 개의 HashSet 객체가 존재한다고 가정합시다. A가 UnionWith() 메서드를 호출하고 UnionWith() 메서드에 B를 전달하면, A는 B를 값을 포함합니다. B의 값은 변경되지 않습니다.

 

UnionWith() 메서드의 매개변수는 IEnumerable<T> 타입이므로 HashSet 이외에도 IEnumerable 인터페이스를 구현하는 List, LinkedList 타입의 객체를 전달할 수 있습니다.


예제 1. 기존 HashSet 객체를 변경

다음 예제는 UnionWith() 메서드를 사용하여 두 개의 HashSet을 합치는 방법을 보여줍니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs1 = new HashSet<int>()
    {
      10, 20, 30, 40
    };

    HashSet<int> hs2 = new HashSet<int>()
    {
      30, 40, 50, 60
    };

    Console.WriteLine("[병합 전 hs1의 데이터]");
    foreach (int num in hs1)
    {
      Console.Write(num + " ");
    }

    hs1.UnionWith(hs2);

    Console.WriteLine("\n");
    Console.WriteLine("[병합 후 hs1의 데이터]");
    foreach (int num in hs1)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[병합 전 hs1의 데이터]
10 20 30 40

[병합 후 hs1의 데이터]
10 20 30 40 50 60

예제 2. 새로운 HashSet 객체 생성

두 개의 HashSet 객체의 값이 합쳐진 새로운 HashSet 객체를 생성할 수 있습니다.

 

A와 B라는 두 개의 HashSet 객체가 존재한다고 가정합시다. 두 개의 HashSet 객체를 합치는 작업이 필요하지만, 두 개의 HashSet 객체의 값은 변경되면 안 됩니다. C라는 새로운 HashSet 객체를 생성 후 A와 B가 합쳐진 값을 할당합니다.

 

다음 예제는 두 개의 HashSet 객체의 값이 합쳐진 새로운 HashSet 객체를 생성합니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs1 = new HashSet<int>()
    {
      10, 20, 30, 40
    };

    HashSet<int> hs2 = new HashSet<int>()
    {
      30, 40, 50, 60
    };

    HashSet<int> hs3 = new HashSet<int>(hs1);
    hs3.UnionWith(hs2);

    Console.WriteLine("[hs1의 데이터]");
    foreach (int num in hs1)
    {
      Console.Write(num + " ");
    }

    Console.WriteLine("\n");
    Console.WriteLine("[hs2의 데이터]");
    foreach (int num in hs2)
    {
      Console.Write(num + " ");
    }

    Console.WriteLine("\n");
    Console.WriteLine("[hs3의 데이터]");
    foreach (int num in hs3)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[hs1의 데이터]
10 20 30 40

[hs2의 데이터]
30 40 50 60

[hs3의 데이터]
10 20 30 40 50 60

방법 2. HashSet 생성자 함수

HashSet 생성자 함수와 LINQ에서 제공하는 Union() 메서드 또는 Concat() 메서드를 사용하여 두 개의 HashSet 객체의 값이 합쳐진 새로운 HashSet 객체를 생성할 수 있습니다.

 

먼저, LINQ에서 제공하는 기능을 사용하기 위해 다음 네임스페이스를 추가합니다.

using System.Linq;

예제 1. LINQ의 Union 메서드

다음 예제는 LINQ에서 제공하는 Union() 메서드와 HashSet의 생성자 함수를 사용하여 두 개의 HashSet 객체의 값이 합쳐진 새로운 HashSet 객체를 생성합니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs1 = new HashSet<int>()
    {
      10, 20, 30, 40
    };

    HashSet<int> hs2 = new HashSet<int>()
    {
      30, 40, 50, 60
    };

    HashSet<int> hs3 = new HashSet<int>(hs1.Union(hs2));

    Console.WriteLine("[hs1의 데이터]");
    foreach (int num in hs1)
    {
      Console.Write(num + " ");
    }

    Console.WriteLine("\n");
    Console.WriteLine("[hs2의 데이터]");
    foreach (int num in hs2)
    {
      Console.Write(num + " ");
    }

    Console.WriteLine("\n");
    Console.WriteLine("[hs3의 데이터]");
    foreach (int num in hs3)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[hs1의 데이터]
10 20 30 40

[hs2의 데이터]
30 40 50 60

[hs3의 데이터]
10 20 30 40 50 60

예제 2. LINQ의 Concat 메서드

다음 예제는 LINQ에서 제공하는 Concat() 메서드와 HashSet의 생성자 함수를 사용하여 두 개의 HashSet 객체의 값이 합쳐진 새로운 HashSet 객체를 생성합니다.

class Program
{
  static void Main(string[] args)
  {
    HashSet<int> hs1 = new HashSet<int>()
    {
      10, 20, 30, 40
    };

    HashSet<int> hs2 = new HashSet<int>()
    {
      30, 40, 50, 60
    };

    HashSet<int> hs3 = new HashSet<int>(hs1.Concat(hs2));

    Console.WriteLine("[hs1의 데이터]");
    foreach (int num in hs1)
    {
      Console.Write(num + " ");
    }

    Console.WriteLine("\n");
    Console.WriteLine("[hs2의 데이터]");
    foreach (int num in hs2)
    {
      Console.Write(num + " ");
    }

    Console.WriteLine("\n");
    Console.WriteLine("[hs3의 데이터]");
    foreach (int num in hs3)
    {
      Console.Write(num + " ");
    }
  }
}

[실행 결과]

[hs1의 데이터]
10 20 30 40

[hs2의 데이터]
30 40 50 60

[hs3의 데이터]
10 20 30 40 50 60
반응형

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

[C#]List 마지막 요소 제거  (0) 2022.08.28
[C#]HashSet 반복문 사용 방법  (0) 2022.08.23
[C#]HashSet 초기화 방법  (0) 2022.08.21
[C#]HashSet 특정 값 가져오는 방법  (0) 2022.08.21
[C#]HashSet 특정 값 삭제 방법  (0) 2022.08.21

댓글