본문으로 바로가기

C# 합집합 교집합 LINQ 로 구현하기

category 닷넷관련/LINQ 2018.03.23 11:26



c# 으로 두 개의 배열 값을 가지고 합집합과 교집합을 LINQ 구문으로 구현해 보겠습니다.
아래 그림 처럼 좌측 차집합과 우측 차집합 그리고 가운데 교집합의 값을 추출해 보겠습니다. 


저는 VISUAL STUDIO CODE 의 툴을 이용해서 기술해 보겠습니다.
설치하지 않으신 분은 https://code.visualstudio.com/download 사이트에서 다운받아 설치하시면 됩니다.

설치 한 후, 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,







댓글을 달아 주세요