首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何过滤List<T>并找到平均值以生成不同的List<T>

如何过滤List<T>并找到平均值以生成不同的List<T>
EN

Stack Overflow用户
提问于 2019-08-09 19:38:40
回答 1查看 59关注 0票数 0

我如何通过特定的字段将列表过滤成不同的值,如果值不是不同的,则取其平均值。请参阅示例

代码语言:javascript
复制
{
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);

目的是列出一份清单,其中包括:

代码语言:javascript
复制
_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))
}

对于任意的值和条目的数量

我试过以下几种方法

代码语言:javascript
复制
            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;
            }

我知道这是错误的,但我似乎不知道修改一个列表的逻辑,我认为创建一个新的列表并在一个新循环中附加可能是前进的道路,但我无法解决它。我认为Linq可能会有所帮助,但在Lambda的表达方面不太有经验。提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-09 19:48:40

您可以使用Linq完成这一任务,按时间对记录进行分组,并使用Average函数计算时间组的电压和电流值:

代码语言:javascript
复制
_resistances
 .GroupBy(r => r.Time)
 .Select(g => new { 
      Time = g.Key, 
      Voltage = g.Average(r => r.Voltage), 
      Current = g.Average(r => r.Current) 
 });
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57436194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档