2014-10-09 4 views
3

중복을 제거한 후에 배열에서 고유 값을 반환하는 것에 대한 답이 많지만 중복을 제거한 후에 배열의 모든 요소가 고유하지는 않습니까? 중복을 제거하기 전에 고유 한 값만 반환하려고합니다. 요소가 원래 배열에서 반복되는 경우 최종 배열에 요소가 필요하지 않습니다.중복을 제거하지 않고 고유 값 반환 - C#

그래서이 배열 ...

[0, 1, 1, 2, 3, 3, 3, 4] 

에만 반환해야합니다 :

[0, 2, 4] 

이 모든 중복뿐만 아니라 이제까지했다 복제 모든 고유 값을 제거하는 것입니다 표현하는 또 다른 방법.

저는 JavaScript 배경에서 왔고 C# 구문이 약간 불안정합니다.

var singleOccurrences = array.GroupBy(x => x) 
          .Where(g => g.Count() == 1) 
          .Select(g => g.Key) 
          .ToArray(); 

당신이 만약 정말로 : :)

답변

6

가장 간단한 방법은 단일 값 그룹에 대한 키를 값에 의해 그룹화 각 그룹의 요소 수를 계산 한 다음 반환 LINQ를 사용하는 것입니다 이것을 큰 입력에 효율적으로 사용하려면 "단일 값을 가진 요소"와 "하나 이상의 값을 갖는 요소"를 세트로 유지하는 고유 한 메소드를 작성할 수 있습니다. 난 당신이 하나 개의 번호를 가지고 그 그룹을 다음 GroupBy 방법

var uniqueNumbers = numbers.GroupBy(x => x) 
        .Where(x => x.Count() == 1) 
        .Select(g => g.Key) 
        .ToArray(); 

이 것 기본적으로 그룹의 모든 번호를 사용할 수있는이 비록 :)

+0

와우, 우리는 동시에 같은 대답을 게시합니다. :) –

+0

고마워요! 입력 값은 50 또는 그 이하의 값으로 제한됩니다. 효율성 문제가 발생하지 않을 정도로 작습니다. – ssamakar

6

로 시작하는 것입니다.

+0

그냥 머리카락에 의해 빠른 답변 :) 감사합니다! – ssamakar