从 int 数组中获取使用单个 lambda 表达式满足给定条件的数字总和
本文关键字:满足 条件 数字 表达式 lambda 数组 int 获取 单个 | 更新日期: 2023-09-27 18:36:58
我不知道
我是否错过了一些简单的东西,我有这个工作示例:
int[] x = new int[] {1, 2, 3, 5, 6, 7};
int[] arrayToUse = x.Where(i => i > 4).ToArray<int>();
int sum = arrayToUse.Sum();
Console.WriteLine(sum.ToString());
我想知道 - 有没有办法将这两者结合起来:
int[] arrayToUse = x.Where(i => i > 4).ToArray<int>();
int sum = arrayToUse.Sum();
为了得到一个将立即返回总和的表达式?
只是:
int sum = x.Where(i => i > 4).Sum();
如果您调用 ToArray
,则会将所有数据复制到一个新的数组对象,但如果您不需要它,请将其省略。 Sum
适用于任何IEnumerable<int>
(以及其他数字类型),无需在那里制作中间数组。
无论如何,如果你调用ToArray
,你可以省略<int>
部分,因为编译器可以推断类型参数,int
,在这种情况下很容易。
当你做Console.WriteLine
时,你不必对整数做ToString
; WriteLine
有一个重载,它接受一个int
(无装箱),它会自动调用ToString
。
在计算总和之前,无需将筛选列表转换为中间数组。你可以这样做:
int[] x = new int[] {1, 2, 3, 5, 6, 7};
int sum = x.Where(i => i > 4).Sum();
Console.WriteLine(sum);
现在我不建议将其用于生产代码,因为它的可读性较差,而且它实际上不会以任何有意义的方式提高性能,但您甚至可以通过单个函数调用来做到这一点:
int[] x = new int[] {1, 2, 3, 5, 6, 7};
int sum = x.Sum(i => i > 4 ? i : 0);
Console.WriteLine(sum);
您可以使用:
int sum = x.Where(i => i > 4).Sum();