2013-09-25 5 views
-1
cpuSensorValues.Add(sensor.Value); 
if (cpuSensorValues.Count == 300) 
    { 
    for (int i = 0; i < cpuSensorValues.Count; i++) 
      { 

      Logger.Write("The Current CPU Temperature Is ===> " + sensor.Value); 
      } 
    cpuSensorValues = new List<float?>(); 
    } 

나는 매초마다 cpuSensorValues ​​목록에 추가하고 있습니다. 그런 다음 300 개의 값으로 갈 때 가장 높은 숫자를 가장 낮은 숫자로 계산하고 List의 평균 숫자를 로거에 쓰고 List에 새 인스턴스를 만듭니다.목록에서 가장 높은 수와 가장 낮은 수를 어떻게 계산할 수 있습니까?

문제는 어떻게이 3 개의 숫자를 계산할 수 있습니까?

+0

'List.Max''List.Min''List.Average' –

+1

신의 사랑을 위해서 ** ** 문서를 읽으십시오. http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx – tnw

+0

또는 [Google] (https://www.google.com/search?q=c%23+list+max+min+ 그 문제에 관해서는 average & oq = c % 23 + list + max + min + average & aqs = chrome..69i57j69i58j69i60l4.4842j0 & sourceid = chrome & espvd =210 & es_sm = 93 & ie = UTF-8). 중복으로 표시. – tnw

답변

7

당신은 Enumerable.Max(), Enumerable.Min()Enumerable.Average() 사용할 수 있습니다

var min = cpuSensorValues.Min(); 
var max = cpuSensorValues.Max(); 
var avg = cpuSensorValues.Average(); 

그러나,이 목록 3 회를 열거합니다 (한 번 통화 당). - 당신은 심지어 실행을 유지할 수

// Returns min/max/average, ignoring null elements 
Tuple<float,float,float> ComputeStats(IEnumerable<float?> values) 
{ 
    float min = float.MaxValue; 
    float max = float.MinValue; 
    float total = 0.0; 
    int count = 0; 

    foreach(var value in values) 
    { 
     if (value.HasValue) 
     { 
      min = Math.Min(min, value.Value); 
      max = Math.Max(max, value.Value); 
      total += value.Value; 
      ++count; 
     } 
    } 

    return Tuple.Create(min, max, total/count); 
} 

당신이 목록에 직접 값을 추가하는 것을 감안할 때 : 실제로, 그 가능성이 문제가 될 수 없습니다, 그러나이 경우, 당신은 단지이 직접 처리 할 수있어 총 + 최소 및 최대. 이렇게하면 값을 열거 (또는 저장) 할 필요가 완전히 없게됩니다. 위의 코드는 List<T>에 값을 저장하지 않고이를 처리하기 위해 쉽게 수정할 수 있습니다.

+0

마지막 비트는 정말 큰 목록을위한 최상의 솔루션입니다. – tnw

+0

@tnw이 경우에도 목록이 다른 용도로 사용되지 않으면 일반적으로 가장 좋은 옵션 일 것입니다. –

+0

의심의 여지가, 나는 "* 특히 * 큰 목록에 대해"말했다. – tnw

관련 문제