从 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 数组中获取使用单个 lambda 表达式满足给定条件的数字总和

只是:

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();