2014-01-07 3 views
1

등급이 [rating] [i] = j는 i 등급이 1이고, i가 1과 10 사이임을 의미합니다. 어떻게 평균 등급을 계산할 수 있습니까?Linq를 사용하여 C#의 평점 평균 계산하기

for (int i = 1; i <= 10;i++) 
      { 
       sum += i * ratings[i]; 
       nr += ratings[i]; 
      } 
ratingAvg = sum/nr; 

내가 ratings.Sum()/ratings.Count()을 사용하는 경우, 내가 원하는 것을하지 않습니다. ratings.Sum(w => index_of_w_in_the_array * w.value).

답변

4

:

var average = ratings.Select((r, n) => r * n).Sum()/ratings.Sum(); 

가 등급 자체가 정수인 경우 위의 한쪽을 double으로 변환하여 결과에 정수 나누기를주지 않아야합니다.

+0

정확히 내가 무엇을 찾고 있었습니까. 감사! – Adrian

0

ratings.Sum()/ratings.Count()과 같이해야합니다. 그렇지 않으면, "내가 원하는 것을하지 않는다"는 것보다 훨씬 더 자세해야합니다.

그리고, 모든 것이 실패한다면, 시도 :

계산에 각 등급의 인덱스 참여 Select를 사용하여 예를 들어,이 작업을 수행하는 여러 가지 방법이 있습니다
ratings.Average(); 
1

누적 합계 및 실행중인 항목 수만 유지하십시오. 목록의 각 항목에 대해 총 수에 추가하고, 값 자체를 곱한 그 값의 수에 따라 누적 합계에 추가 :

여기
int sum = 0; 
int count = 0; 
for(int i = 0; i < array.Length; i++) 
{ 
    sum += array[i] * i; 
    count += array[i]; 
} 
double average = sum/(double)count; 

좋은 보이는 LINQ 솔루션이지만,이다 꽤 덜 비효율적 일 것입니다 :

var average = array.SelectMany((n, i) => Enumerable.Repeat(n, i)) 
    .Average();