C# 如何筛选列表<;T>;并找到平均值以创建一个不同的列表<;T>;

C# 如何筛选列表<;T>;并找到平均值以创建一个不同的列表<;T>;,c#,C#,如何按特定字段将列表筛选为不同的值,如果值不不同,则取其平均值。请参见示例 { 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> _resis

如何按特定字段将列表筛选为不同的值,如果值不不同,则取其平均值。请参见示例

{
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);
对于任意值和任意数量的条目

我试过以下方法

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

您可以使用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) 
 });

您是否尝试过linq方法?可能重复您在一个问题中提出了两个问题:关于Distinct()和Average()。请一次解决一个问题。嗨,凯文,是的,我有,但我需要时间相等的所有值的平均值。我可以分别通过电压或电流进行平均,但我需要平均所有值,其中只有时间相等,并附加到列表中。希望这是有意义的。@ThomasWeller如果Russ发布了一个关于Distinct()的问题和一个关于Average()的问题,这两个问题都会因为过于琐碎而立即被社区关闭。我也不认为这是两个截然不同的问题,Russ正在努力完成一件事。你尝试过linq方法吗?可能重复你在一个问题中问了两个问题:关于distinct()和Average()。请一次解决一个问题。嗨,凯文,是的,我有,但我需要时间相等的所有值的平均值。我可以分别通过电压或电流进行平均,但我需要平均所有值,其中只有时间相等,并附加到列表中。希望这是有意义的。@ThomasWeller如果Russ发布了一个关于Distinct()的问题和一个关于Average()的问题,这两个问题都会因为过于琐碎而立即被社区关闭。我也不认为这是两个截然不同的问题,Russ正在努力完成一件事。哦,太好了,谢谢你,Jcruz,希望这不是一个愚蠢的问题。@Russ不是愚蠢的问题,只是Linq让事情变得更简单的另一个例子哦,太好了,谢谢你,Jcruz,希望这不是一个愚蠢的问题。@Russ不是愚蠢的问题,这只是Linq让事情变得更简单的另一个例子