【问题标题】:Modify elements in a list by index按索引修改列表中的元素
【发布时间】:2010-11-14 00:48:35
【问题描述】:

我需要通过索引修改List<int>。我在另一个List<int>中有索引

List<int> values;
List<int> indexes;

indexes.Select(i=>values[i]).ForEach(val=>val = 0);

当然,我知道上面的语法行不通。但是,由于我知道需要修改的项目的索引,所以我想用带有 lambda 的索引来修改列表。有可能吗?

【问题讨论】:

    标签: c# list lambda


    【解决方案1】:

    在某些情况下,LINQ 不会为您提供特别好的解决方案,尤其是在使用索引或修改数据时。我认为以下简单的foreach 循环可能是最易读的写法:

    foreach(var i in indexes) values[i] = 0;
    

    但是,如果集合indexesList&lt;T&gt; 类型,那么您可以使用ForEach 方法(请参阅MSDN)。这让代码稍微短了一点,但是否比简单的foreach循环更具可读性是个问题:

    indexes.ForEach(i => values[i] = 0);
    

    ForEach 方法目前在 LINQ 中不可用(对于一般的IEnumerable&lt;T&gt;),但有不少人要求它。但正如我所说,它是否使代码更具可读性尚不清楚。

    (如果您想为 IEnumerable&lt;T&gt; 编写相同的内容,则必须使用 ToList 或编写自己的 ForEach 扩展方法。

    【讨论】:

      【解决方案2】:

      我可能遗漏了一些东西,但这就是您要找的全部吗?

      foreach(int index in indexes)
      {
          values[index] = 0; // your modified value here
      }
      

      【讨论】:

      • 很抱歉让您感到困惑。我的意思是问是否有一个 lambda 表达式来做到这一点?我将编辑我的帖子
      【解决方案3】:

      您没有使用 LINQ。你可以做这样简单的事情。我想,这也让意思更清晰。

      foreach(int index in indexes)
      {
          values[index] = 0;
      }
      

      【讨论】:

      • 当然,但我要问的是 lambda。抱歉。编辑了帖子。
      猜你喜欢
      • 2017-12-12
      • 2013-10-30
      • 2017-12-16
      • 2013-12-03
      • 2021-12-01
      • 2017-04-18
      • 2020-01-02
      • 1970-01-01
      • 2020-08-25
      相关资源
      最近更新 更多