2009-10-21 3 views
2

Linq를 사용하여 .Net 컬렉션의 빈도 분포를 계산하는 빠르고 간단한 방법이 있습니까?.Net/C를 사용하여 컬렉션의 도수 분포 계산 #

예 : 임의로 긴 목록에는 여러 번의 반복이 있습니다. 목록을 걷고 반복 계산/추적하는 영리한 방법은 무엇입니까?

var dups = list.GroupBy(i => i).Where(g => g.Skip(1).Any()); 

(Skip(1).Any()을 쓰는 것은 (1)가이 없기 때문에>() 수보다 더 빨리해야한다 :

+1

빠르거나 간단하게 하시겠습니까? –

답변

2

가장 쉬운 방법은 해시 맵을 사용하거나 키로 값을 사용하여 값을 증가 시키거나) 속도가 느린 경우를 제외하고 각 그룹에서 두 개 이상의 항목을 통과. 그러나 차이는 아마도 무시할 버킷 크기 (버킷 1 = 1 - 10, 버킷 2 = 11 - 20 등)를 선택하고 각 버킷을 값만큼 증가시킵니다.

그러면 주파수를 검토하고 결정할 수 있습니다.

5

목록에서 중복 항목을 찾을 수있는 가장 간단한 방법은, 같은 그룹에 있습니다 list의 열거

+0

왜 이것을 다운 그레이드 했습니까? – SLaks

1

C5 generic collections library에는 카운트를 통해 중복을 허용하는 HashBag 구현이 있습니다. 다음 의사 코드는 당신이 찾고있는 무엇을 얻을 것입니다 :

 
var hash = new HashBag(); 
hash.AddAll(list); 
var mults = hash.ItemMultiplicities(); 

mults가 다음 목록 항목이 키와 인 IDictionary<K,int> 포함됩니다 (K 귀하의 목록에있는 항목의 유형입니다) 다중성은 값입니다.

+0

나는 C5를 사용하지 않았지만 비슷한 생각을 바탕으로 내 자신의 프로세스를 작성했다. 사전