LINQ nicht lineare Reihenfolge nach Stringlänge

8

Ich versuche eine Liste mit der Reihenfolge der Strings zu erhalten, so dass die längsten an beiden Enden der Liste stehen und die kürzesten in der Mitte sind. Zum Beispiel:

%Vor%

würde wie folgt sortiert:

%Vor%

BEARBEITEN: Um dies zu verdeutlichen, suchte ich gezielt nach einer LINQ-Implementierung, um die gewünschten Ergebnisse zu erzielen, weil ich nicht sicher war, wie es mit LINQ möglich war.

    
chad 10.05.2014, 21:54
quelle

3 Antworten

7

Frag nicht wie und warum ... ^^

%Vor%

Okay, bevor ich vergesse, wie es funktioniert, gehen Sie hier.

Dazu muss beispielsweise eine Liste mit 6 Elementen neu geordnet werden; Der längste String ist Index 5, der kürzeste Index 0 der vorsortierten Liste.

%Vor%

Wir beginnen mit Enumerable.Range(0, length) ergibt

%Vor%

Dann wenden wir i => length - 1 - 2 * i nachgeben an

an %Vor%

und wir haben den nicht-negativen Teil richtig. Beachten Sie, dass i >> 31 eine arithmetische Verschiebung nach links ist und das Vorzeichenbit in alle Bits kopiert. Daher ergeben nicht-negative Zahlen 0, während negative Zahlen -1 ergeben. Das bedeutet wiederum, dass das Subtrahieren von i >> 31 nicht-negative Zahlen nicht ändert, sondern 1 zu negativen Zahlen addiert, die

ergeben %Vor%

und jetzt wenden wir schließlich Math.Abs() an und erhalten

%Vor%

was das gewünschte Ergebnis ist. Es funktioniert ähnlich für Listen mit ungerader Länge.

    
Daniel Brückner 10.05.2014, 22:25
quelle
10

Sie können zwei geordnete Gruppen erstellen und dann die erste Gruppe absteigend (bereits erledigt) und die zweite Gruppe aufsteigend sortieren:

%Vor%

Ergebnis:

%Vor%     
Tim Schmelter 10.05.2014 22:11
quelle
0

Nur eine weitere Option, die ich besser lesen und nachvollziehen kann: Sie haben eine geordnete Liste:

%Vor%

Erstellen Sie eine neue Liste und wechseln Sie einfach an die Stelle, an der Sie Elemente hinzufügen ::

%Vor%

Süß und einfach:)

Wie bei Daniel Bruckner können Sie die Startbedingung auch ändern, wenn Sie sich darum kümmern, welche Zeichenfolgen zuerst kommen:

%Vor%     
Noctis 11.05.2014 00:33
quelle

Tags und Links