微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

LINQ获取列的平均值并写入csv

如何解决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 举报,一经查实,本站将立刻删除。