Laden...

Array.Sort case-sensitive

Erstellt von wiesi vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.489 Views
wiesi Themenstarter:in
89 Beiträge seit 2005
vor 14 Jahren
Array.Sort case-sensitive

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.:

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:

Weiss jemand Rat?

Danke und Grüße,
wiesi

3.430 Beiträge seit 2007
vor 14 Jahren

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

5.299 Beiträge seit 2008
vor 14 Jahren

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.