2016-05-22 4 views
1

Ich habe eine Liste von Float-Zahlen, die gleichen WerteWie finde ich die Indexsequenz um eine Liste zu sortieren?

List<float> l = new List<float>{1, 2, 6, 4, 2, 0}; 

Und ich möchte den Index-Sequenz erhalten haben die Liste zu sortieren, die den Index der geringsten Anzahl zuletzt erste und der Index der größten Zahl hat . Für das obige Beispiel sind die Ergebnisse {5, 0, 1, 4, 3, 2}. Für die gleiche Zahl spielt die Reihenfolge keine Rolle. Irgendeine Möglichkeit, es zu tun? Vielen Dank.

+0

@WicherVisser diese Frage nicht in Beziehung steht. – dasblinkenlight

Antwort

4

paaren Elemente mit ihren Index sortiert werden paarweise auf dem Element, dann wird der Index ernten, wie folgt aus:

var res = l.Select((v, i) => new {v, i}) 
    .OrderBy(p => p.v) 
    .Select(p => p.i) 
    .ToList(); 

Demo.

+0

Großartig! Ich frage mich, (1) was ist der Typ von neuem {v, i}? Ist es ein Paar? (2) Warum Compiler weiß, dass ich Index bin? Ist es Grammatik beschrieben der zweite Parameter ist Index? Vielen Dank. – user1899020

+1

@ user1899020 'new {v, i}' ist ein anonymer Typ ([link] (https://msdn.microsoft.com/en-us/library/bb397696.aspx)). Der Compiler erstellt es vor Ort für die Verwendung in dieser Abfrage. Der Compiler hat keine Ahnung, dass "i" ein Index ist, es ist die 'Select'-Überladung, die eine Zwei-Argument-Funktion verwendet ([this one] (https://msdn.microsoft.com/en-us/library/bb534869 (v = vs.100) .aspx)). – dasblinkenlight

Verwandte Themen