我是c#的新手,我有一个像这样的数组:
int[] cost = new int[] {10, 15, 20, 30, 50};
Run Code Online (Sandbox Code Playgroud)
查找/获取小于或等于该值的所有值的最简单代码是什么?
给定值为29,将返回20,15和10.
这是您可以为此做的最简单的事情之一:
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)
第一个选项使用名为" Where操作" 的扩展方法IEnumerable,该数组实现. IEnumerable是一系列元素的接口,可以逐个步进.
第二个选项使用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)
Where或Array.FindAll函数调用在每个元件上的lambda函数Array或IEnumerable和返回(收率)背仅其中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)