簡體   English   中英

如何計算列表中的最高、最低和平均數?

[英]How to calculate the highest, lowest and average number from a List?

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?>();
}

List<float?> cpuSensorValues都會向List<float?> cpuSensorValues添加一個值。 然后當它達到 300 個值時,我想計算列表中的最高數字、最低數字和平均數字,將每個數字寫入記錄器,然后在列表中創建一個新實例。

問題是我如何計算這 3 個數字?

您可以使用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>中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM