c# 으로 두 개의 배열 값을 가지고 합집합과 교집합을 LINQ 구문으로 구현해 보겠습니다.
아래 그림 처럼 좌측 차집합과 우측 차집합 그리고 가운데 교집합의 값을 추출해 보겠습니다.
저는 VISUAL STUDIO CODE 의 툴을 이용해서 기술해 보겠습니다.
설치 한 후, c# 을 실행하기위한 별도의 작업을 해야 합니다.
.net core 와 c# 확장 프로그램을 설치 한 후 아래와 같이 진행합니다.
visual studio code 에서 상단 메뉴 중, 보기 > 통합터미널을 선택합니다.
그리고 해당 폴더에서 ConsoleTest 라는 폴더를 만듭니다.
PS D:\SampleSource> mdir ConsoleTest
c# 의 솔루션을 콘솔로 구현할 예정입니다.
PS D:\SampleSource\ConsoleTest> dotnet new console
실행하면
"Console Application" 템플릿을 만들었습니다.
사후 생성 작업을 처리하는 중...
D:\SampleSource\ConsoleTest\ConsoleTest.csproj에 대해 'dotnet restore' 실행 중...
Restoring packages for D:\SampleSource\ConsoleTest\ConsoleTest.csproj...
Generating MSBuild file D:\SampleSource\ConsoleTest\obj\ConsoleTest.csproj.nuget.g.props.
Generating MSBuild file D:\SampleSource\ConsoleTest\obj\ConsoleTest.csproj.nuget.g.targets.
Restore completed in 395.94 ms for D:\SampleSource\ConsoleTest\ConsoleTest.csproj.
복원했습니다.
이제 visual studio code 탐색기에도 콘솔프로그램을 위한 여러개의 파일이 생성된것을 보실 수 있습니다.
여기서 program.cs 파일을 선택해서 엽니다. 전체적인 코드를 우선 보죠.
using System;
using System.Linq;
namespace ConsoleTest
{
class Program
{
static void Main(string[] args)
{
int[] first = { 2, 4, 6, 8, 10 };
int[] second = { 3, 6, 9, 12 };
// 차집합 : first-second
var exceptLeft = first.Except(second); // 2, 4, 8, 10
foreach (var item in exceptLeft)
{
Console.Write(item.ToString() + ",");
}
Console.WriteLine("");
var exceptRight = second.Except(first); // 3, 9, 12
foreach (var item in exceptRight)
{
Console.Write(item.ToString() + ",");
}
Console.WriteLine("");
var intersection = second.Intersect(first); // 6
foreach (var item in intersection)
{
Console.Write(item.ToString() + ",");
}
}
}
}
LINQ 구문에서 차집합을 구현하기위해서는 차집합의 Except 와 교집합의 Intersect 함수를 사용하면 금방 해결이 됩니다.
dotnet run 구문을 visual studio code 의 터미널에서 실행하면 결과값이 나옵니다.
PS D:\SampleSource\ConsoleTest> dotnet run
2,4,8,10,
3,9,12,
6,