簡體   English   中英

如何過濾列表 <T> 並找出平均值以得出不同的列表 <T>

[英]How to filter List<T> and find average to make a distinct List<T>

如何通過特定字段將列表過濾為不同的值,而值不同的地方取其平均值。 請看例子

{
Public int Time;
Public float Voltage;
Public float Current;
Public Resistance(int time, float voltage, float current)
{
Time = time;
Voltage = voltage;
Current = current;
}
Public List<Resistance> _resistances = new List<Resistance>();
_resistances.Add(new Resistance(Time = 1, Voltage =3.2, Current = 1);
_resistances.Add(new Resistance(Time = 1, Voltage =4.0, Current = 2);
_resistances.Add(new Resistance(Time = 1, Voltage =6.5, Current = 6);
_resistances.Add(new Resistance(Time = 2, Voltage =3.2, Current =4);
_resistances.Add(new Resistance(Time =2, Voltage =3.2, Current = 2);
_resistances.Add(new Resistance(Time = 3, Voltage 5, Current = 1);

目的是列出以下內容:

_resistance[0]{ Time =1,, Voltage = Average(3.2,4,6.5), Current = Average(1,2,6))
_resistance[1]{ Time =2,, Voltage = Average(3.2,3.2,5), Current = Average(4,2,1))
}

對於任何任意值和條目數量

我嘗試了以下

            int divisor = 1;
            double voltageSum = 0;
            double currentSum = 0;

            while (j >= 1)
            {
                while (_resistances[j].Time== _resistances[j - 1].Time)
                {
                    divisor++;
                    voltageSum += _resistances[j].Voltage;
                    currrentSum += _resistances[j].Current;
                    _resistances.RemoveAt(j);
                    j -= 1;
                }

                var averageVoltage = voltageSum / divisor;
                var averageCurrent = currentSum / divisor;
                _rawDataList[j].Voltage = (float)averageVoltage;
                _rawDataList[j].Current= (float)averageCurrent;
                j -= 1;
            }

我知道這是錯誤的,但是我似乎無法弄清楚修改列表的邏輯,我認為創建新列表並在forloop中追加也許是前進的方向,但我無法解決。 我認為Linq可能會有所幫助,但對Lambda表達式的了解不是太豐富。 提前致謝

您可以使用Linq完成此操作,將記錄按時間分組,然后使用“ Average功能為時間組計算“電壓”和“電流”的值:

_resistances
 .GroupBy(r => r.Time)
 .Select(g => new { 
      Time = g.Key, 
      Voltage = g.Average(r => r.Voltage), 
      Current = g.Average(r => r.Current) 
 });

暫無
暫無

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

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