Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Array.Sort case-sensitive
wiesi
myCSharp.de - Member

Avatar #avatar-2384.gif


Dabei seit:
Beiträge: 89

Themenstarter:

Array.Sort case-sensitive

beantworten | zitieren | melden

Hi,

ich portiere gerade ein Java-Programm nach C# und stehe vor folgendem Problem:

Ich brauche eine Dateiliste, wo die Namen case-sensitive sortiert sind, z.B.:

[0]: A
[1]: B
[2]: a

Konkret handelt es sich dabei um ein FileInfo-Array, folgendes mache ich derzeit:



FileInfo[] files = dir.GetFiles();

Array.Sort(files,
                    delegate(FileInfo f1, FileInfo f2)
                    {
                        return f1.Name.CompareTo(f2.Name);
                    }
                );

Die resultierende Sortierung ist:

[0]: A
[1]: a
[2]: B

Weiss jemand Rat?

Danke und Grüße,
wiesi
private Nachricht | Beiträge des Benutzers
michlG
myCSharp.de - Experte

Avatar #avatar-2909.png


Dabei seit:
Beiträge: 3.430
Herkunft: Naturns - Südtirol - Italien

beantworten | zitieren | melden

Hallo wiesi,

IMHO ist es das schnellste wenn du dir selbst einen Comparer zauberst der die Element miteinander vergleicht.

Siehe dazu das folgende Beispiel:


List<char> levelChars = new List<char>();
levelChars.AddRange("+%@&~".ToCharArray());
List<string> names = new List<string>();
names.AddRange(new[]{"~user1", "~user84",  "@user3", "&user8", "+user39", "user002", "user2838", "%user29"});
names.Sort((x,y) =>
               {
                   int xLevel = levelChars.IndexOf(x[0]);
                   int yLevel = levelChars.IndexOf(y[0]);

                   if (xLevel != yLevel)
                   {
                       // if xLevel is higher; x should come before y
                       return xLevel > yLevel ? -1 : 1;
                   }

                   // x and y have the same level; regular string comparison
                   // will do the job
                   return x.CompareTo(y);                       
               });

Das habe ich hier gefunden: http://stackoverflow.com/questions/1037387/customizing-sort-order-of-c-arrays

Damit kannst du auch leicht deine Vergleiche aufstellen

Gruss
Michael
private Nachricht | Beiträge des Benutzers
ErfinderDesRades
myCSharp.de - Experte

Avatar #avatar-3151.jpg


Dabei seit:
Beiträge: 5.299

beantworten | zitieren | melden

String kann doch von Haus aus case-sensitiv comparen - man muß nur die richtige Überladung von String.Compare() nehmen.
(Die Überladungen kann man sich im ObjectBrowser angugge, weiterführendes dazu: Möglichkeiten der Informationsgewinnung)
Der frühe Apfel fängt den Wurm.
private Nachricht | Beiträge des Benutzers