我需要按索引修改List<int>
。我在另一个索引List<int>
按索引修改列表中的元素
List<int> values;
List<int> indexes;
indexes.Select(i=>values[i]).ForEach(val=>val = 0);
当然,我知道上述语法不会工作。但是,因为我知道我需要修改的项目的索引,所以我想用带lambda的索引修改列表。有可能这样做吗?
我需要按索引修改List<int>
。我在另一个索引List<int>
按索引修改列表中的元素
List<int> values;
List<int> indexes;
indexes.Select(i=>values[i]).ForEach(val=>val = 0);
当然,我知道上述语法不会工作。但是,因为我知道我需要修改的项目的索引,所以我想用带lambda的索引修改列表。有可能这样做吗?
在某些情况下,LINQ不会给你一个特别好的解决方案,特别是在处理索引或修改数据时。我认为,以下简单foreach
循环很可能是写这最可读的方式:
foreach(var i in indexes) values[i] = 0;
然而,如果集合indexes
是List<T>
类型,那么你可以使用ForEach
方法(见MSDN)。这使得代码更短一点,但它是一个问题,无论是比简单的foreach
循环更加易读:
indexes.ForEach(i => values[i] = 0);
ForEach
方法是当前不可用在LINQ(一般IEnumerable<T>
),但也有相当多的人们要求它。但正如我所说,目前还不清楚它是否使代码更易读。
(如果您想为IEnumerable<T>
写同样的东西,您必须使用ToList
或编写自己的ForEach
扩展方法)。
我可能会错过一些东西,但这是你想要的吗?
foreach(int index in indexes)
{
values[index] = 0; // your modified value here
}
抱歉让您困惑。我的意思是要求有一个lambda表达式来做到这一点?我将编辑我的帖子 – Jimmy 2010-11-14 00:55:05
你不有使用LINQ。你可以做这样简单的事情。我认为,它也保持了更清晰的意思。
foreach(int index in indexes)
{
values[index] = 0;
}
当然,但我要问的是lambda。对不起,编辑帖子。 – Jimmy 2010-11-14 00:57:31
谢谢,托马斯 – Jimmy 2010-11-14 01:02:08