C#에서 두 시퀀스(배열) 간의 차이를 구하려면 LINQ의 Except() 메서드를 사용하면 됩니다. Except()는 첫 번째 시퀀스에는 포함되어 있지만 두 번째 시퀀스에는 없는 요소들만 모아 새로운 컬렉션으로 반환합니다.
1. 두 시퀀스 설정하기
먼저 서로 비교할 두 개의 double 형식 배열을 준비합니다.
double[] arr1 = { 10.2, 15.6, 23.3, 30.5, 50.2 };
double[] arr2 = { 15.6, 30.5, 50.2 };
2. Except() 메서드로 차이 구하기
위 두 배열의 차집합을 구하려면 AsQueryable()에 이어 Except() 메서드를 호출합니다. 결과는 IEnumerable<double> 형태로 반환됩니다.
IEnumerable<double> res = arr1.AsQueryable().Except(arr2);
3. 전체 예제 코드
using System;
using System.Linq;
using System.Collections.Generic;
class Demo {
static void Main() {
double[] arr1 = { 10.2, 15.6, 23.3, 30.5, 50.2 };
double[] arr2 = { 15.6, 30.5, 50.2 };
Console.WriteLine("초기 목록...");
foreach(double ele in arr1) {
Console.WriteLine(ele);
}
IEnumerable<double> res = arr1.AsQueryable().Except(arr2);
Console.WriteLine("새 목록...");
foreach (double a in res) {
Console.WriteLine(a);
}
}
}
4. 실행 결과
초기 목록... 10.2 15.6 23.3 30.5 50.2 새 목록... 10.2 23.3
핵심 정리
arr1에는 5개의 요소가 있으며, 그중 3개(15.6, 30.5, 50.2)는 arr2에도 동일하게 존재합니다. 따라서 Except()의 실행 결과인 새 목록에는 arr2에 없는 10.2와 23.3만 남게 됩니다.
참고로 Except() 메서드는 기본 같음 비교자(Default Equality Comparer)를 사용해 요소를 비교하며, 결과에는 중복 요소가 자동으로 제거되어 반환됩니다. 사용자 지정 비교 로직이 필요한 경우 IEqualityComparer를 인수로 전달하여 비교 방식을 직접 정의할 수도 있습니다.