我是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]);
}
Run Code Online (Sandbox Code Playgroud)
示例2:使用两个列表中的索引
double result = 0;
for (int i = 0; i < list1.Count; ++i)
{
result += f(list1[i]) * g(list2[i]);
}
Run Code Online (Sandbox Code Playgroud)
如何编写等效的lambda表达式?
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);
Run Code Online (Sandbox Code Playgroud)例1:
var newList = Enumerable.Range(0, list.Count - 1)
.Select(i => list[i] / list[i + 1])
.ToList();
Run Code Online (Sandbox Code Playgroud)
例2:
var result = Enumerable.Zip(list1.Select(f), list2.Select(g), (a, b) => a * b).Sum();
Run Code Online (Sandbox Code Playgroud)
(*)我不确定这是它的正式名称.如果您知道,请用正确的名称纠正我.
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |