我是c#的新手,我有一个像这样的数组:
int[] cost = new int[] {10, 15, 20, 30, 50};
查找/获取小于或等于该值的所有值的最简单代码是什么?
给定值为29,将返回20,15和10。
答案 0 :(得分:8)
这是您可以为此做的最简单的事情之一:
var resultArray = cost.Where(item => item <= 29).ToArray();
这是另一个:
var resultArray = Array.FindAll(cost, item => item <= 29);
第一个选项使用名为Where
的扩展方法,该方法在IEnumerable
上运行,这些方法实现。 IEnumerable
是一系列元素的接口,可以一个接一个地逐步执行。
第二个选项使用FindAll
,它实际上内置于Array
类。
item => item <= 29
内容为lambda notation
。它是一种在现场定义功能的高度简洁的方法。
这种现场编写匿名函数的方式是
Where
或FindAll
每个都接收一个匿名函数的参数,我们将在Where()
或{{的实际调用中定义这个匿名函数的参数。 1}}。FindAll()
(名称可以是任何内容,也可以是item
)。此项是x
(或Array
)的单个元素 - 在这种情况下为IEnumerable
的元素 - 编译器推断。函数参数的名称由int
=>
的右侧。 (阅读=>
作为&#34;这是一个函数,其中参数=>
到达item
&#34;的主体右侧。身体是一个表达式,它被演绎为=>
Boolean
或true
,因此该函数的返回值为false
。因此,基本上Boolean
与声明如下函数相同,但它更简洁,可以很容易地用作另一个函数的参数。这是宣布这样一个函数的漫长道路,所以你可以看到lambda编写它的方式更加简洁:
item => item <= 29
Boolean int func(int x)
{
if (x<=29) {
return true;
} else {
return false;
}
}
或Where
函数在Array.FindAll
或Array
中的每个元素上调用lambda函数,并返回(yield)仅返回lambda函数返回的项目真。<强>更新强>
看起来您编辑了原始问题以删除对查找索引的引用,因此以下内容不再相关(上面的内容找到元素的值,而不是元素的索引)。但是下面显示了如何找到满足条件的数组元素的值和索引:
你提到了索引。此版本还查找满足标准的原始数组(不仅仅是元素)的索引:
IEnumerable