2013-11-13 1 views
-3

(0 голосов)Перечислимый метод выбора для изменения значений в списке

простой вопрос: что не так с моим Linq. Я хочу, чтобы значения списка были заменены его индексом. Простой, как я думал:

var dd = myList.Select((x, i) => new {x=i}); 

dd пусто. Я не эксперт Linq, и я изучаю, как это работает.

+1

Что вы имеете в виду под «пустой»? 'dd' является' IEnumerable <'a> ', поэтому вам нужно выполнить итерацию для доступа к любым элементам в нем. – Lee

+0

Что вы на самом деле пытаетесь сделать? список от 0 до n? funny guy –

+0

nah, я хочу использовать значения x на основе этого индекса. Как x = 10, если индекс кратен 42, – Naresh

ответ

-1
var dd = myList.Select(i => myList.IndexOf(i)); 

Это должно сделать трюк

+0

Downvoters позаботились прокомментировать? Я делаю именно то, что задает вопрос –

+0

Я не нисходящий, но это плохо работает. Проверьте мой ответ. –

+0

Я не спускал вниз, но я думаю, что это потому, что есть лучшие способы получить индекс. – gleng

1

Не следует использовать LINQ для изменения коллекции. Linq для запросов, он не предназначен для изменения коллекции.

LINQ =>Language-Integrated Query

"Q" означает "Query".

И для вашего вопроса я не думаю, что это имеет смысл. Индекс будет «0 - счет-1»

var dd = Enumerable.Range(0, myList.Count).ToList(); 

это должно сделать это.


Я думаю, вы имеете в виду это?

var dd = myList.Select((x, i) => new { Value = x, Index = i}).ToList(); 
+2

+1 Хорошее решение! С тех пор я удалил свой ответ! – gleng

+0

@ Downvoter комментировать PLS? Мне бы хотелось увидеть, где не так. –

+0

Я знаю, как использовать Range. То, что я хочу сделать, - это другая проблема, но ответ на мой маленький вопрос решает проблему. Кроме того, я знаю, что означает Linq, как я упоминал в вопросе, я изучаю Linq, и я хочу посмотреть, как это работает. – Naresh

1

Linq не следует использовать для изменения коллекций. Вы можете использовать Select, чтобы создать новый список с индексами.

var dd = myList.Select((x, i) => i).ToList(); 

Что касается Вашего комментария

Я хочу работать на значениях х основанные на нем индекса.

Это условно можно сделать с помощью foreach цикла, но можно использовать Select

var dd = items.Select((x, i) => i % 42 == 0 ? 10 : x); 

или в более общем

public static class EnumerableExtensions 
{ 
    public static IEnumerable<T> Replace<T>(
     this IEnumerable<T> collection, 
     Func<T, bool> predicate, 
     T value 
    ) 
    { 
     return collection.Select((x, i) => predicate(x) ? value : x); 
    } 

    public static IEnumerable<T> Replace<T>(
     this IEnumerable<T> collection, 
     Func<T, int, T> predicate, 
     T value 
    ) 
    { 
     return collection.Select((x, i) => predicate(x, i) ? value : x); 
    } 
} 

var dd = items.Replace((x, i) => i % 42 == 0, 10); 
+0

спасибо за полноту. – Naresh

Смежные вопросы