• linq:求分组后的每组最大值、最小值、平均值等、Aggregate聚合函数


    求分组后的每组最大值、最小值、平均值等

        public int MinEachGroup()
            {
                #region min-each-group
                List<Product> products = GetProductList();
    
                var categories = from p in products
                                 group p by p.Category into g
                                 let minPrice = g.Min(p => p.UnitPrice)
                                 select (Category: g.Key, CheapestProducts: g.Where(p => p.UnitPrice == minPrice));
    
                foreach (var c in categories)
                {
                    Console.WriteLine($"Category: {c.Category}");
                    foreach(var p in c.CheapestProducts)
                    {
                        Console.WriteLine($"	Product: {p}");
                    }
                }
                #endregion
                return 0;
            }

    用法

    该Linq字面意思为聚合,例如可用来对集合进行筛选以及上述的求和等等,它有三个重载,它是对列表上的每个元素执行操作,也就是说对第一个和第二个上的元素执行操作,将执行的结果继续携带进行操作。其中有一个重载是种子重载。

    我们求1到5的阶乘。

                var nums = Enumerable.Range(2, 4);
                var sum = nums.Aggregate(1, (a, b) => a * b);
                Console.WriteLine(sum);

    所谓种子,也就是先从种子开始作为第一个元素执行操作,整个过程为((((1*2)*3)*4)*5)。

    在项目中有这样一个场景:打开对话框上传文件,可以对该文件进行命名,但是我们知道文件名是无法以某些特殊字符命名的如<或者|等等,当文件名为这些时,上传到后台我们会进行替换处理用“-”来进行替换。我们看看代码,例如:

                var invalidFileName = Path.GetInvalidFileNameChars();
                var replaceResult = invalidFileName.Aggregate("study<Aggregate>first", (accmulate, result) => (accmulate.Replace(result, '-')));
                Console.WriteLine(replaceResult);

    结果如下:

  • 相关阅读:
    ubuntu 13.04 root权限设置方法详解
    观锁和乐观锁——《POJOs in Action》
    观锁与悲观锁(Hibernate)
    关于python的环境变量问题
    vs2010 调试快捷键
    VIM7.3中文手册
    Java最全文件操作实例汇总
    response letter模板
    数据库字段类型
    Tomcat系列之Java技术详解
  • 原文地址:https://www.cnblogs.com/cxxtreasure/p/14163296.html
Copyright © 2020-2023  润新知