如何解决LINQ获取列的平均值并写入csv
我正在尝试通过卡通人物的分类来选择卡通人物,然后平均它们的攻击和防御属性。然后,最后将其写入csv文件。 输入:
classfication | attack | defense
Wolf 5 6
Wolf 2 12
输出:
attack_average | defense_average
3.5 9
我写了一个代码,可以获取平均值,但是不能对它们使用'ToList()',并且因为有两个变量,所以不能将它们写入一个csv文件中。
var list = list.Where(x => x.classfication.Equals("Wolf"));
var def = list.Select(x => x.defense).Average();
var atk = list.Select(x => x.attack).Average();
using (var writer = new StreamWriter("D:\\Example\\Example.csv"))
using (var csv = new CsvWriter(writer,CultureInfo.InvariantCulture))
{
csv.WriteRecords(def);
}
解决方法
理论上,您可以根据已有数据创建一个新列表或数组。
csv.WriteRecords(new[]{new { attack_average = atk,defense_average = def }});
但是考虑将原始输入“分组”并获得每个组的平均值可能更有用。
var averagesByClass = list
.Where(x => x.classfication.Equals("Wolf")) // might not want this?
.GroupBy(x => x.classfication)
.Select(g => new
{
classification = g.Key,// Remove this if you don't want it
attack_average = g.Select(x => x.defense).Average(),defense_average = g.Select(x => x.attack).Average(),})
.ToList();
using (var writer = new StreamWriter("D:\\Example\\Example.csv"))
using (var csv = new CsvWriter(writer,CultureInfo.InvariantCulture))
{
csv.WriteRecords(averagesByClass);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。