如何过滤 List<T> 并查找平均值以生成不同的 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 表达式不太有经验。提前致谢


慕田峪7331174
浏览 65回答 1
1回答

慕盖茨4494581

您可以使用 Linq 来完成此操作,按时间对记录进行分组,并使用该Average函数计算时间组的电压和电流值:_resistances&nbsp;.GroupBy(r => r.Time)&nbsp;.Select(g => new {&nbsp;&nbsp; &nbsp; &nbsp; Time = g.Key,&nbsp;&nbsp; &nbsp; &nbsp; Voltage = g.Average(r => r.Voltage),&nbsp;&nbsp; &nbsp; &nbsp; Current = g.Average(r => r.Current)&nbsp;&nbsp;});
打开App,查看更多内容
随时随地看视频慕课网APP