얻을

2015-01-04 1 views
2

내가 목록을 가지고 말리스트의 "평균 실행"얻을

List<int> numbers = new List<int>(); 

을 나는 그것의 "평균 실행"을 얻기 위해 노력하고있어. (미안, 나는 그것을 어떻게 부르는 지 정말로 모른다). 예컨대

: 첫 번째 보통 5 그래서

리스트의 첫 번째 항목이 5이다 5의 평균은 5이다.

이 목록의 두 번째 항목은 7이고 5 and 7의 평균은 6이므로 두 번째 평균은 6입니다.

이 목록의 세 번째 항목은 10이다, 5, 7 and 10의 평균은 7.3, 그래서 세 번째 평균 7.3 등등입니다.

첫 번째 평균, 두 번째 평균 등은 내가 얻으려고하는 평균입니다. 이 일을 어떻게 하죠? 나는 인터넷 검색을 해왔지만 솔직히 내가 무엇을 찾고 있어야하는지 잘 모르겠다. :(

+1

'numbers.Average();'는 목록에있는 값의 현재 평균을 알려줍니다. 그게 새로운 목록이나 그걸 저장할 필요가 있다면 무엇이 명확하지 않다 – Plutonix

+0

@Plutonix 나는 그가 새로운 목록에 그것을 저장하고 싶다고 생각한다. – niceman

+2

새로운'List '과'for' 루프 만 있으면됩니다. IT는 정말 쉬운 일입니다 ... 아직 코드 작성을 시도해 보셨습니까? – MarcinJuraszek

답변

4

당신은이 같은 시도 할 수 있습니다.이 numbers.Count1에서 시퀀스를 생성합니다

var averages = Enumerable.Range(1, numbers.Count) 
       .Select(x => numbers.Take(x).Average()) 
       .ToList(); 

을 그 다음 각각의 시간에 X 요소를 얻을 것이다 Take 사용 (당신은 인덱스로 X을 생각할 수 유일한 차이는 1부터 시작하여 하나씩 증가하여 numbers.Count까지입니다. 첫 번째 요소부터 시작하여 average을 얻으십시오.

+0

예, 이것은 트릭을 수행하며 매우 깔끔한 솔루션처럼 보입니다. 감사! –

+1

이것은 우아한 솔루션이지만, 각 반복마다 처음부터 평균을 다시 계산하므로 다소 비효율적입니다. 런타임은 O (n log n)이 될 것입니다. 합계를 유지하는 간단한 솔루션은 O (n) –

+0

입니다. @DaveM 나는 너무 생각 했으므로 이와 같은 간단한 문제에 복잡한 구조를 사용할 필요가 없습니다. – niceman

5

시도해보십시오.

string st = Console.ReadLine(); 
string[] strs = st.Split(' '); 
List<int> numbers = new List<int>(); 
List<double> averages = new List<double>(); 
for (int i = 0; i < strs.Length; i++) 
{ 
    numbers.Add(int.Parse(strs[i])); 
    averages.Add(numbers.Average()); 
} 

이것은 표준 입력에서 숫자를 읽고, 숫자는 입력시 공백으로 구분됩니다.

2

이 목록

List<int> numbers = new List<int>(); 
    List<double> averages = new List<double>(); 

테스트 데이터

numbers.AddRange(new int[]{5, 7, 10}); 

    // get average of current List 
    averages.Add(numbers.Average()); 

모두 그 자체로 평균의 이러한 목록은 일반적으로 요소 수, 시간의 기간이나 뭐 같은 일부 다른 데이터없이 많은 자격을 의미 나던 그것.

이 방법은 이동 평균이 하나의 값과 하나가 아닌 경우에 더 적합합니다. 예를 들어 앱은 값을 저장합니다. 그런 다음 주기적으로 1 분에 1 회, 평균이 계산되고 저장됩니다.

+1

너의 것이 OP의 스킬 레벨 – Plutonix

+0

에 더 많이 적용될 수있다. 그 대답을 받아들이는 것을 보면서 나는 그렇게 생각하지 않는다. – niceman

+0

기다려주세요. 답변이 작동하지 않습니다! 이것은 "running average"를 얻지 못할 것입니다. – niceman