有人可以读给我以下行lambda。
n => n % 2 == 1
另外如果我必须编写没有lambda的同一段代码,我该怎么写呢。它可能会让我明白。
另一段代码在
下面List<int> numbers = new List<int>{11,37,52};
List<int> oddNumbers = numbers.where(n => n % 2 == 1).ToList();
答案 0 :(得分:4)
大声朗读表达式
n 'goes to' n modulus two equals one
n => n % 2 == 1
基本上,您可以将此lambda视为一个函数,当提供给它的值(n
)为奇数且为正时返回true,否则为false。您也可以将其写为方法
bool IsOddAndPositive(int n)
{
return n % 2 == 1;
}
在您的代码段中使用它将是
List<int> numbers = new List<int>{11, 37, 52};
List<int> oddNumbers = numbers.Where(IsOddAndPositive).ToList();
结果(你指定的内容和方法示例)是
11, 37
答案 1 :(得分:1)
这个功能
n => n % 2 == 1
接受一个参数(n)并返回布尔值:
当重写为普通函数时,它将等同于
Boolean IsOdd(int n) { -- <- I've named it "IsOdd" since lambda functions have no explict names while ordinary functions have
return n % 2 == 1;
}
您的代码
List<int> oddNumbers = numbers.where(n => n % 2 == 1).ToList();
我是一个LINQ表达式,它从列表中选择奇数值
答案 2 :(得分:0)
关于你的问题,如何在没有lambda的情况下编写它:
int[] digits = {1,2,3,4,5,6,7,8,9,10};
int[] OddDigits = new int[5];
for(int i = 0; i < digits.Length; i++)
{
if(digits[i] % 2 == 1)
{
int x = 0;
OddDigits[x] = digits[i];
x++;
}
}
为了简单起见,我只是用数组替换了列表。正如我在前面的评论中所述,这是一个简单的模运算
答案 3 :(得分:0)
第1行实例化3个整数的列表 %运算符(也称为模运算符)在将第一个操作数除以第二个操作数后计算余数
第二行的结果将是一个包含11和37的列表。
你可以使用foreach这样写这个:
List<int> numbers = new List<int> { 11, 37, 52 };
List<int> oddNumbers = new List<int>();
foreach (var num in numbers)
{
if (num % 2 == 1)
{
oddNumbers.Add(num);
}
}
您也可以使用Array.ForEach,如下所示:
numbers.ForEach(num =>
{
if (num % 2 == 1)
oddNumbers.Add(num);
});