C# 프로그래밍에서 배열 안에 같은 숫자가 두 번 이상 등장하는지, 즉 중복 값이 존재하는지 확인해야 하는 경우가 자주 있습니다. 가장 대표적인 방법은 Dictionary(딕셔너리)를 사용해 각 요소의 등장 횟수를 세는 것입니다.
1단계: 배열 선언하기
먼저 검사할 정수형 배열을 준비합니다.
int[] arr = {
87,
55,
23,
87,
45,
23,
98
};2단계: 딕셔너리로 등장 횟수 세기
딕셔너리를 하나 선언한 뒤, foreach 루프로 배열을 순회하면서 각 숫자가 몇 번 나왔는지 기록합니다. 키가 이미 존재하면 카운트를 1 증가시키고, 그렇지 않으면 1로 초기화합니다.
var dict = new Dictionary<int, int>();
foreach(var count in arr) {
if (dict.ContainsKey(count))
dict[count]++;
else
dict[count] = 1;
}딕셔너리의 Value 값이 곧 해당 숫자의 등장 횟수를 의미하므로, 이 값이 2 이상이라면 중복이 존재한다고 판단할 수 있습니다.
전체 예제 코드
using System;
using System.Collections.Generic;
namespace Demo {
public class Program {
public static void Main(string[] args) {
int[] arr = {
87,
55,
23,
87,
45,
23,
98
};
var dict = new Dictionary<int, int>();
foreach(var count in arr) {
if (dict.ContainsKey(count))
dict[count]++;
else
dict[count] = 1;
}
foreach(var val in dict)
Console.WriteLine("{0} occurred {1} times", val.Key, val.Value);
}
}
}출력 결과
87 occurred 2 times 55 occurred 1 times 23 occurred 2 times 45 occurred 1 times 98 occurred 1 times
결과에서 볼 수 있듯이 87과 23이 각각 2번씩 나타났으므로, 이 배열에는 중복된 숫자가 존재합니다.
참고: LINQ로 더 간단하게 확인하기
중복 여부만 true/false 형태로 빠르게 알고 싶다면 LINQ의 GroupBy를 활용해 한 줄로 처리할 수도 있습니다.
using System.Linq; bool hasDuplicate = arr.GroupBy(x => x).Any(g => g.Count() > 1); Console.WriteLine(hasDuplicate); // True 출력
또는 HashSet을 이용하는 방법도 성능 면에서 매우 효율적입니다.
var seen = new HashSet<int>(); bool hasDuplicate = arr.Any(x => !seen.Add(x));
HashSet의 Add 메서드는 이미 존재하는 요소를 추가하려 할 때 false를 반환하므로, 이 특성을 이용하면 중복을 즉시 판별할 수 있습니다.