查找小于或等于该值的所有元素

时间:2015-04-27 01:19:31

标签: c# arrays

我是c#的新手,我有一个像这样的数组:

int[] cost = new int[] {10, 15, 20, 30, 50};

查找/获取小于或等于该值的所有值的最简单代码是什么?

给定值为29,将返回20,15和10。

1 个答案:

答案 0 :(得分:8)

这是您可以为此做的最简单的事情之一:

var resultArray = cost.Where(item => item <= 29).ToArray();

这是另一个:

var resultArray = Array.FindAll(cost, item => item <= 29);
  1. 第一个选项使用名为Where的扩展方法,该方法在IEnumerable上运行,这些方法实现。 IEnumerable是一系列元素的接口,可以一个接一个地逐步执行。

  2. 第二个选项使用FindAll,它实际上内置于Array类。

  3. item => item <= 29内容为lambda notation。它是一种在现场定义功能的高度简洁的方法。

    这种现场编写匿名函数的方式是

    • WhereFindAll每个都接收一个匿名函数的参数,我们将在Where()或{{的实际调用中定义这个匿名函数的参数。 1}}。
    • 匿名函数本身作为自己的一个参数接收一个元素,我们称之为FindAll()(名称可以是任何内容,也可以是item)。此项是x(或Array)的单个元素 - 在这种情况下为IEnumerable的元素 - 编译器推断。函数参数的名称由int
    • 保留
    • 函数体位于=>的右侧。 (阅读=>作为&#34;这是一个函数,其中参数=>到达item&#34;的主体右侧。身体是一个表达式,它被演绎为=> Booleantrue,因此该函数的返回值为false

    因此,基本上Boolean与声明如下函数相同,但它更简洁,可以很容易地用作另一个函数的参数。这是宣布这样一个函数的漫长道路,所以你可以看到lambda编写它的方式更加简洁:

    item => item <= 29
    • Boolean int func(int x) { if (x<=29) { return true; } else { return false; } } Where函数在Array.FindAllArray中的每个元素上调用lambda函数,并返回(yield)仅返回lambda函数返回的项目真。

    <强>更新

    看起来您编辑了原始问题以删除对查找索引的引用,因此以下内容不再相关(上面的内容找到元素的值,而不是元素的索引)。但是下面显示了如何找到满足条件的数组元素的值和索引:

    你提到了索引。此版本还查找满足标准的原始数组(不仅仅是元素)的索引:

    IEnumerable