按索引修改列表中的元素

时间:2010-11-14 00:48:36

标签: c# list lambda

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

中有索引
List<int> values;
List<int> indexes;

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

当然,我知道上面的语法不会起作用。但是,我知道需要修改的项目的索引,我想用lambda修改索引列表。有可能吗?

3 个答案:

答案 0 :(得分:6)

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

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

但是,如果集合indexes的类型为List<T>,那么您可以使用ForEach方法(请参阅MSDN)。这使得代码变得更短,但是它是否比简单的foreach循环更具可读性是一个问题:

indexes.ForEach(i => values[i] = 0);
LINQ目前不提供

ForEach方法(对于一般IEnumerable<T>),但有不少人要求它。但正如我所说,目前尚不清楚它是否使代码更具可读性。

(如果你想为IEnumerable<T>编写同样的内容,则必须使用ToList或编写自己的ForEach扩展方法。

答案 1 :(得分:1)

我可能会遗漏一些东西,但这就是你要找的东西吗?

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

答案 2 :(得分:1)

你没有 使用LINQ。你可以做一些简单的事情。我认为它也使意义更加清晰。

foreach(int index in indexes)
{
    values[index] = 0;
}
相关问题