3
在python中,我可以很容易地得到一个索引时迭代例如是否有类似Python的枚举linq
>>> letters = ['a', 'b', 'c']
>>> [(char, i) for i, char in enumerate(letters)]
[('a', 0), ('b', 1), ('c', 2)]
我该怎么做类似的linq?
在python中,我可以很容易地得到一个索引时迭代例如是否有类似Python的枚举linq
>>> letters = ['a', 'b', 'c']
>>> [(char, i) for i, char in enumerate(letters)]
[('a', 0), ('b', 1), ('c', 2)]
我该怎么做类似的linq?
当然。有一个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
您可以用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();
}