我需要通过索引修改List<int>
。我在另一个List<int>
List<int> values;
List<int> indexes;
indexes.Select(i=>values[i]).ForEach(val=>val = 0);
当然,我知道上面的语法不会起作用。但是,我知道需要修改的项目的索引,我想用lambda修改索引列表。有可能吗?
答案 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;
}