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);
结果如下: