C# - 리스트 차집합, 서로 다른 요소 찾기

두개의 리스트의 서로 다른 요소, 차집합을 찾는 방법을 소개합니다.

1. 특정 리스트만 갖고 있는 요소 찾기

A, B 리스트가 있을 때, A 리스트에만 있고 B 리스트에는 없는 요소를 찾는 방법입니다.

array1.Except(array2)list1에서 list2가 갖고 있지 않은 요소만 Enumerable로 리턴합니다. 결과 값은 foreach 등으로 접근할 수 있습니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            List<int> list1 = new List<int> {1, 2, 3, 4, 5};
            List<int> list2 = new List<int> {1, 2, 4, 8, 16};

            var result = list1.Except(list2);
            foreach (var n in result) {
                Console.WriteLine(n);
            }
        }
    }
}

Output:

3
5

2. 두 리스트가 서로 갖고 있지 않은 요소들 찾기

HashSet.SymmetricExceptWith(list)는 HashSet의 요소들 중에 list에 있는 요소는 HashSet에서 제거하고, 없는 요소는 HashSet에 추가합니다.

아래 예제의 결과를 보면 list1list2가 서로 갖고 있지 않은 요소들만 result에 추가되었습니다.

using System;

namespace Example {
    public class Program {
        public static void Main(string[] args) {

            List<int> list1 = new List<int> {1, 2, 3, 4, 5};
            List<int> list2 = new List<int> {1, 2, 4, 8, 16};

            HashSet<int> diff = new HashSet<int>(list1);
            diff.SymmetricExceptWith(list2);

            int[] result = diff.ToArray();
            Console.WriteLine(string.Join(", ", result));
        }
    }
}

Output:

3, 5, 8, 16
Loading script...
codechachaCopyright ©2019 codechacha