首页 > 解决方案 > 如何在 lambda 表达式中访问列表中的下一项

问题描述

我正在创建一个简单的查询(如果这甚至是使用 LINQ 的术语),它将列表中的每个数字添加到索引中,然后从新列表中我想将具有最高索引的值除以该值具有最高索引 - 1,然后对对中的所有索引(索引 val,索引 val-1)执行相同的操作,因此结果将是原始列表一半大小的列表,然后选择最高结果从新列表中。

 var lst = new List<int>() { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

   var fianle = lst
               .Select((value, i) => new { i, value })
               .Select(item =>
          item.value + item.i)
             .Select((x , how to accse the previos item? ) => x/previositem)
            .Max(x => x);

所以我想知道

  1. 如何使用 lambda 表达式向后循环
  2. 如何使用 lambda 表达式访问列表中的前一项

先感谢您!

标签: c#listlambda

解决方案


您可以在匿名对象中拥有一个属性来保存前一个:

var listWithPrevious = lst
               .Select((value, i) => 
                          new { 
                                Index = i,
                                Value = value,
                                Previous = lst.ElementAtOrDefault(i + 1) 
                              });

然后使用上面的集合来做任何需要的事情。

您可以将代码修改为:

var fianle = lst
           .Select((value, i) => 
                         new { 
                                Index = i,
                                Value = value,
                                Previous = lst.ElementAtOrDefault(i + 1) 
                              })
           .Select(item =>
      item.value + item.i)
         .Select((x , Previous ) => x/Previous)
        .Max(x => x);

推荐阅读