2010-02-03 113 views
3

在python中,我可以很容易地得到一個索引時迭代例如是否有類似Python的枚舉linq

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

我該怎麼做類似的linq?

回答

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 
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(); 
}