2011-01-05 4 views
3

linq를 사용하여 분할 된 히스토그램을 만드는 방법이 있습니까? 특정 객체의 발생 횟수를 셀 수있는 몇 가지 예제를 보았습니다. 두 값 사이에 일련의 개체가 발생하는 횟수를 계산하는 linq 기반의 기록 기록을 만들 수 있습니까?Linq를 사용한 히스토그램

히스토그램에 필요한 버킷을 만들기 위해 다양한 항목별로 그룹화하는 방법을 모르겠습니다. 범위를 작성하기 위해서 개시 바운드와 폭을 사용한다고합니다.

숫자 배열을 반복하고 각 숫자를 < = 상한 및 하한 범위별로 그룹화해야합니다. 그렇다면 각 그룹을 합산하면됩니다. 그하여 각 바 및 그룹에 대한 정수 값을 생성

var groups = input.GroupBy(x => (int)((x.value - start)/width));

: 어떻게 당신이 뭔가를 할 수있는 부분

에 의해

답변

3

이와 비슷한?

 Random randF = new Random(); 
     List<double> nums = new List<double>(); 
     for (int i = 0; i < 100000; i++) 
     { 
      nums.Add(randF.NextDouble()*100); 
     } 

     double fromXF = 30; 
     double toXF = 80; 
     int groupCount = 10; // number of groups between values 
     var histF = from i in nums 
        let groupKeyF = ((i-fromXF)/(toXF-fromXF)*groupCount) // even distribution of "groupCount" groups between fromXF and toXF, simple math, really 
        where groupKeyF >= 0 && groupKeyF < groupCount // only groups we want 
        let groupKey = (int)groupKeyF // clamp it to only group number 
        group i by groupKey into gr // group it according to group number 
        orderby gr.Key 
        select new { Value = gr.Key, Count = gr.Count() }; 

     foreach (var item in histF) 
     { 
      Console.WriteLine("Group number: " + item.Value + ", Count: " + item.Count); 
     } 
+0

이것은 좋은 해결책입니다. 나는 LINQ에 위대한 * 그 * 아니에요 그래서 나는 그것을 시도해야합니다. 감사. – James

+0

골든. LINQ를 실제로 깔끔하게 사용합니다. 감사 – James

3

을 그룹을 달성하는 아무 생각이 없습니다.

관련 문제