2010-11-14 2 views
2

Мне нужно изменить List<int> по индексам. У меня есть индексы в другой List<int>Изменение элементов в списке по индексу

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

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

Конечно, я знаю, что выше синтаксис не будут работать. Однако, поскольку я знаю индексы элементов, которые мне нужно изменить, я хотел бы изменить список с помощью индексов с лямбдой. Можно ли это сделать?

ответ

6

В некоторых случаях 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).

+0

Спасибо, Томас – Jimmy

1

Возможно, мне что-то не хватает, но это все, что вы ищете?

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

жаль вас смущать. Я хотел спросить, есть ли это выражение лямбда? Я отредактирую свой пост – Jimmy

1

Вы не имеют использовать LINQ. Вы могли бы сделать что-то столь же простое, как это. Думаю, это также делает смысл понятным.

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

Конечно, но я хотел спросить - это лямбда. Извините за это. Отправил сообщение. – Jimmy