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($"\tProduct: {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);

结果如下:

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

上一篇:java lambda表达式小技巧(一)分组groupingBy后保持排序不变


下一篇:仿天猫整站三个版本的对比