【问题标题】:how to access the next item in the list in lambda expressions如何在 lambda 表达式中访问列表中的下一项
【发布时间】:2019-08-05 07:58:00
【问题描述】:

我正在创建一个简单的查询(如果这甚至是使用 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 表达式访问列表中的上一项

提前谢谢你!

【问题讨论】:

  • 旁注:.ToList() 都是多余的,可以删除

标签: c# list lambda


【解决方案1】:

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

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);

【讨论】:

  • Previous = list.ElementAtOrDefault(i + 1)
  • 这是完整的查询吗?
  • @DmitryBychenko 同意,索引器 Guilhem 也可能失败
  • @avivgood3 不,这只是提供想法,您可以将其用于输出
猜你喜欢
  • 1970-01-01
  • 2016-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-29
  • 1970-01-01
相关资源
最近更新 更多