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