[英]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.