Laden...

LINQ - Arrays sortieren, welche buchstaben und zahlen enthalten

Erstellt von Tschebbe vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.144 Views
T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren
LINQ - Arrays sortieren, welche buchstaben und zahlen enthalten

Hallo,
ich hab folgendes Problem und zwar moechte ich String arrays sortieren, welche buchstaben und zahlen enthalten.


var refDesOfNewSheet = from refdes in installationPoints_new
                        where refdes != "" && refdes != null
                        orderby refdes
                        select refdes;

funktioniert alles ohne Fehlermeldung. Das Problem ist aber, dass meine Strings wie folgt aussehen:
"R10", "R9", "R8"
Wenn ich das nun sortiere sollte R8, R9, R10 heraus kommen, es kommt aber eben
R10, R8, R9 raus.

Wie kann ich das beheben? Das R gehoert mit zum string, d.h. ich brauche die inforamation und kann sie nicht einfach wegschneiden.

Danke fuer anregungen und ideen

Tom

1.564 Beiträge seit 2007
vor 14 Jahren

Hallo Tom

Die Sortierung ist so schon korrekt. "9" ist größer als "1" und da du Strings sortierst wird von links nach rechts sortiert. Du müsstest beispielsweise eine Regex nehmen, die Zahl extrahieren und über int.Parse konvertieren um nach der zu sortieren.

Grüße
Flo

Blog: Things about Software Architecture, .NET development and SQL Server
Twitter
Google+

Je mehr ich weiß, desto mehr weiß ich was ich noch nicht weiß.

6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

verwende OrderBy direkt als ExtensionMethod. OrderBy hat nämlich auch eine Überladung wo du einen IComparer angeben kannst indem du dann deine eigene Sortierlogik einbauen kannst.

Baka wa shinanakya naoranai.

Mein XING Profil.

T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren

ok super danke! Der denk anstoss hat mir geholfen. In meinem Fall war es so, dass immer das erste Element ein Buchstabe ist, somit konnte ich es wie folg realisieren:

var refDesOfNewSheet = from refdes in installationPoints_new
                        where refdes != "" && refdes != null
                        orderby Convert.ToInt32(refdes.Substring(1))
                        select refdes;

Gruesse Tom

Y
238 Beiträge seit 2005
vor 14 Jahren

Hallo Tschebbe,

wenn ich es richtig verstehe möchtest du die listen alphanumerisch sortieren - dafür benötigst du einen entsprechenden comparer. Leider gibt es im .NET-Framework (meines wissens nach) nix passendes 😦 Falls du eine ähnliche sortierung haben möchtest wie es der win-explorer macht dann kannst du mittels pinvoke auf StrCmpLogicalW zugreifen...

Gruß

T
Tschebbe Themenstarter:in
34 Beiträge seit 2009
vor 14 Jahren

@yngwie: Die Loesung die ich geposted habe funktioniert. Ich schneide die Zahlen ab convertiere sie in int und lass sie dann sortieren. Funktioniert wunderbar.