是否有类似于linq的python枚举的东西

时间:2010-02-03 19:09:37

标签: .net python linq

在python中,我可以在迭代时轻松获取索引,例如

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

如何使用linq做类似的事情?

2 个答案:

答案 0 :(得分:8)

不确定。有一个overload of 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

答案 1 :(得分:4)

您可以使用提供索引变量的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();
}