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 |
댓글