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

new*_*guy 0 c# arrays

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

int[] cost = new int[] {10, 15, 20, 30, 50};
Run Code Online (Sandbox Code Playgroud)

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

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

DWr*_*ght 8

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

var resultArray = cost.Where(item => item <= 29).ToArray();
Run Code Online (Sandbox Code Playgroud)

这是另一个:

var resultArray = Array.FindAll(cost, item => item <= 29);
Run Code Online (Sandbox Code Playgroud)
  1. 第一个选项使用名为" Where操作" 的扩展方法IEnumerable,该数组实现. IEnumerable是一系列元素的接口,可以逐个步进.

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

item => item <= 29东西lambda notation.这是一种在现场定义功能的高度简洁的方法.

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

  • Where或者FindAll每个接收一个匿名函数的参数,我们将在实际调用Where()or中定义这个匿名函数的参数FindAll().
  • 匿名函数本身接收一个元素作为它自己的一个参数,我们将调用它item(名称可以是任何东西,它也可以是x).此项是Array(或IEnumerable) - 元素int在这种情况下的单个元素- 编译器推断.函数参数的名称留在=>
  • 功能体是正确的=>.(读=>作"这是一个函数,其中参数item转到了正文的右侧=>")正文是一个表达式,它被宣告为a Boolean true或a false,因此函数的返回值是a Boolean.

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

Boolean int func(int x)
{
    if (x<=29) {
        return true;
    } else {
      return false;
    }
}
Run Code Online (Sandbox Code Playgroud)
  • WhereArray.FindAll函数调用在每个元件上的lambda函数ArrayIEnumerable和返回(收率)背仅其中lambda函数返回真那些项目.

更新

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

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

List<int> indexesInvolved = new List<int>();
var resultArray = cost.Where((item, index) =>
    { 
        if (item <= 29) {
            indexesInvolved.Add(index);
            return true;
        } 
        else {
            return false;
        } 
    }
 ).ToArray();
var foundIndexArray = indexesInvolved.ToArray();
Run Code Online (Sandbox Code Playgroud)