代码之家  ›  专栏  ›  技术社区  ›  Jimmy

按索引修改列表中的元素

  •  2
  • Jimmy  · 技术社区  · 15 年前

    我需要修改 List<int> 通过索引。我有另一个索引 清单& lt;int & gt;

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

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

    3 回复  |  直到 15 年前
        1
  •  6
  •   Tomas Petricek    15 年前

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

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

    但是,如果集合 indexes 属于类型 List<T> 然后你可以使用 ForEach 方法(见) MSDN )这会使代码变短一点,但问题是它是否比简单代码更可读 前额 循环:

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

    前额 方法当前在Linq中不可用(用于常规 IEnumerable<T> 但是有相当多的人要求这样做。但正如我所说,它是否使代码更具可读性尚不清楚。

    (如果你想写同样的东西 IEnumerable<t> 你要么用 ToList 或者自己写 前额 扩展方法)。

        2
  •  1
  •   tbridge    15 年前

    我可能错过了什么,但这就是你要找的吗?

    foreach(int index in indexes)
    {
        values[index] = 0; // your modified value here
    }
    
        3
  •  1
  •   Colin Mackay    15 年前

    你不 有 使用LINQ。你可以做这样简单的事情。我想,它也能使意思更清楚。

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