Есть ли что-то похожее на перечисление python для linq - PullRequest
3 голосов
/ 03 февраля 2010

В Python я могу легко получить индекс при итерации, например,

>>> letters = ['a', 'b', 'c']
>>> [(char, i) for i, char in enumerate(letters)]
[('a', 0), ('b', 1), ('c', 2)]

Как мне сделать что-то похожее с linq?

Ответы [ 2 ]

8 голосов
/ 03 февраля 2010

Конечно.Существует перегрузка Enumerable.Select, для которой требуется Func<TSource, int, TResult> для проецирования элемента вместе с его индексом:

Например:

char[] letters = new[] { 'a', 'b', 'c' };
var enumerate = letters.Select((c, i) => new { Char = c, Index = i });
foreach (var result in enumerate) {
    Console.WriteLine(
        String.Format("Char = {0}, Index = {1}", result.Char, result.Index)
    );
}

Вывод:

Char = a, Index = 0
Char = b, Index = 1
Char = c, Index = 2
4 голосов
/ 03 февраля 2010

Вы можете сделать это с перегрузкой Enumerable.Select , которая предоставляет индексную переменную. Это обеспечивает доступ к индексу, который вы можете использовать для создания нового анонимного типа. Следующие компилируется и работает правильно:

static void Main()
{

    var letters = new char[] { 'a', 'b', 'c' };
    var results = letters.Select((l, i) => new { Letter = l, Index = i });

    foreach (var result in results)
    {
        Console.WriteLine("{0} / {1}", result.Letter, result.Index);
    }
    Console.ReadKey();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...