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.
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
Dann wenden wir i => length - 1 - 2 * i
nachgeben an
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
und jetzt wenden wir schließlich Math.Abs()
an und erhalten
was das gewünschte Ergebnis ist. Es funktioniert ähnlich für Listen mit ungerader Länge.
Sie können zwei geordnete Gruppen erstellen und dann die erste Gruppe absteigend (bereits erledigt) und die zweite Gruppe aufsteigend sortieren:
%Vor%Ergebnis:
%Vor%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%