2010-11-18 8 views
2

Grundsätzlich entspricht dies:Gibt es eine Linq-Funktion, die Indizes zurückgibt?

public static IEnumerable<KeyValuePair<int, T>> Enumerate<T>(this IEnumerable<T> enumerable) 
{ 
    int i = 0; 
    return enumerable.Select(e => new KeyValuePair<int, T>(i++, e)); 
} 

Python hat einen, aber ich kann es nicht in C# finden. Wenn nicht, kein Biggie, ich habe es nur geschrieben, aber wenn es schon existiert, würde ich mich lieber an den Standard halten. Beats mit einem Akward int i=0 Deklaration über jedem foreach.

Antwort

6
return enumerable.Select((e, i) => new KeyValuePair<int, T>(i, e)); 

Beachten Sie auch, dass Ihr Ansatz i++ als gefangen Variable ist nicht sicher; jemand könnte zum Beispiel Count() zuerst anrufen - von Parallel.

+2

+1 ... nur Sekunden! :) –

+0

@Ahmad: Ich wollte dich auch abstimmen, aber du hast es schon gelöscht. Ich glaube nicht, dass er zusätzliche Glaubwürdigkeit verdient, weil er dich bis zur Pointe geschlagen hat;) – mpen

+0

Ich denke, ich könnte das auch anstelle von foreach verwenden? 'myEnum.Select ((e, i) => {/ * meine Schleife Inhalt * /});'? – mpen

Verwandte Themen