代码之家  ›  专栏  ›  技术社区  ›  ScottS

是否有类似于python针对linq的枚举

  •  3
  • ScottS  · 技术社区  · 16 年前

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

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

    我怎样才能对linq做类似的事情?

    2 回复  |  直到 16 年前
        1
  •  9
  •   jason    16 年前

    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
    
        2
  •  5
  •   Reed Copsey    16 年前

    您可以使用超负荷的 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();
    }