2010-11-14 129 views
2

我需要按索引修改List<int>。我在另一个索引List<int>按索引修改列表中的元素

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

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

当然,我知道上述语法不会工作。但是,因为我知道我需要修改的项目的索引,所以我想用带lambda的索引修改列表。有可能这样做吗?

回答

6

在某些情况下,LINQ不会给你一个特别好的解决方案,特别是在处理索引或修改数据时。我认为,以下简单foreach循环很可能是写这最可读的方式:

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

然而,如果集合indexesList<T>类型,那么你可以使用ForEach方法(见MSDN)。这使得代码更短一点,但它是一个问题,无论是比简单的foreach循环更加易读:

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

ForEach方法是当前不可用在LINQ(一般IEnumerable<T>),但也有相当多的人们要求它。但正如我所说,目前还不清楚它是否使代码更易读。

(如果您想为IEnumerable<T>写同样的东西,您必须使用ToList或编写自己的ForEach扩展方法)。

+0

谢谢,托马斯 – Jimmy 2010-11-14 01:02:08

1

我可能会错过一些东西,但这是你想要的吗?

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

抱歉让您困惑。我的意思是要求有一个lambda表达式来做到这一点?我将编辑我的帖子 – Jimmy 2010-11-14 00:55:05

1

你不使用LINQ。你可以做这样简单的事情。我认为,它也保持了更清晰的意思。

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

当然,但我要问的是lambda。对不起,编辑帖子。 – Jimmy 2010-11-14 00:57:31