使用C#获取列表中每个元素的第一个索引的平均值

时间:2017-05-30 14:04:07

标签: c# json average

现在我有一个DataPointSet

列表
public class DataPointSet {
    public string target{ get; set; }
    public List<List<decimal>>  datapoints{ get; set; }
}

我使用foreach循环将DataPointSet附加到列表中。

现在,在该列表中......有没有办法可以获得每个datapoints列表的平均值,但仅限于第一个0索引?

对象列表最后输出为json,我将用它来解释我的目标:

[
  {
    "target": "target_one",
    "datapoints": [
      [
        8.0,
        1493510400.0
      ],
      [
        8.0,
        1493596800.0
      ]
    ]
  },
  {
    "target": "target_two",
    "datapoints": [
      [
        1.0,
        1493510400.0
      ],
      [
        1.0,
        1493596800.0
      ],
      [
        10.0,
        1493683200.0
      ]
    ]
  },
]

对于list / json中的每个元素,我想获得datapoints键中所有第一个元素的平均值。

c#中是否有一种简单的方法可以用来做这个或者是我唯一的选择循环遍历每个元素然后进行比较?

任何帮助都会很棒,谢谢!

3 个答案:

答案 0 :(得分:2)

当然,你有简单的LINQ方式。

所以,你有:

List<DataPointSet> dataPointSets = ...;

然后,您可以使用以下代码找到答案:

foreach (var dataPointSet in dataPointSets)
{
    var average = dataPointSet.datapoints
       .Average(innerList => innerList.First())
} 

答案 1 :(得分:2)

这是LINQ的一个很好的用例。如果你知道嵌套列表总是有元素,你可以快速而又脏。感谢@JoePhillips进行了一些更正。

list
    .SelectMany(x => x.datapoints)
    .Average(x => x.First());

请注意,此查询的平均值为8.0,8.0,1.0,1.0和10.0。

答案 2 :(得分:1)

您可以在列表中使用Linq Average方法。

using System.Linq;

List<decimal> firsts =  datapoints.ForEach(i=>i.First());
firsts.Average();