我是lambda表达式的新手,我有问题将包含循环内列表索引的代码部分转换为等效的lambda表达式。
示例1:使用一个列表中的不同索引
List<double> newList = new List<double>();
for (int i = 0; i < list.Count - 1; ++i)
{
newList.Add(list[i] / list[i + 1]);
}
示例2:使用两个列表中的索引
double result = 0;
for (int i = 0; i < list1.Count; ++i)
{
result += f(list1[i]) * g(list2[i]);
}
如何编写等效的lambda表达式?
答案 0 :(得分:7)
lambda表达式看起来像{params} => {body}
,其中特征符号是=>
“映射到”。您要求的通常称为LINQ 查询表达式,它有两种样式:
功能查询样式通常是对LINQ扩展方法的链式调用序列,例如Select
,Where
,Take
或ToList
。这是我在下面的例子中使用的风格,也是更普遍的风格(根据我的经验)。
“语言集成”样式(*)使用内置的C#关键字,编译器将为您转换为功能样式。例如:
var query = from employee in employeeList
where employee.ManagerId == 17
select employee.Name;
| compiler
v rewrite
var query = employeeList
.Where(employee => employee.ManagerId == 17)
.Select(employee => employee.Name);
示例1:
var newList = Enumerable.Range(0, list.Count - 1)
.Select(i => list[i] / list[i + 1])
.ToList();
示例2:
var result = Enumerable.Zip(list1.Select(f), list2.Select(g), (a, b) => a * b).Sum();
(*)我不确定这是它的正式名称。如果你知道的话,请用正确的名字纠正我。
答案 1 :(得分:1)