对列表c#中的特定索引应用lambda表达式

Dej*_*jan 4 c# linq lambda

我是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表达式?

Tim*_*lds 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);
    
    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)

(*)我不确定这是它的正式名称.如果您知道,请用正确的名称纠正我.