Sie sollten Ihre Frage so spezifisch wie möglich stellen. Sie können tun, was Sie Array.Sort
und eine Lambda-Funktion wollen mit:
string [] files = new string[] {"3.6.1_Patch","3.5_CoreScript","3.5.1_Patch","3.6_Patch"};
Array.Sort(files, (x,y) => {
string [] x1 = x.Split('_');
string [] y1 = y.Split('_');
return String.Compare(x1[0], y1[0]);
});
Ich habe es dir den Rand Fall zu behandeln, in denen es keine Versionsnummer ist.
EDIT
Ihre Dateinamen sind komplexer als ursprünglich vorgestellt. Ich nehme an alles bis zur ersten nicht numerischen Zeichenfolge ist die Version?
An dieser Stelle würde ich eine Klasse machen, um die Dateinamen zu analysieren und die Versionsnummern zu speichern. Es implementiert auch die IComparable
Schnittstelle zum Sortieren.
public class Version : IComparable<Version> {
// Just guessing here - without knowing the actual format
public int Major = 0;
public int Minor = 0;
public int Build = 0;
public string FileName;
public Version(string fileName) {
ParseFileName(fileName);
}
// Split the string on '_' or '.',
// Considers the first 3 numbers to be version
// (stops parsing at non-numeric value)
public void ParseFileName(string fileName)
{
FileName = fileName;
string [] data = Regex.Split(fileName, @"[_\.]");
int x;
if (Int32.TryParse(data[0], out x)) {
Major = x;
if (2 <= data.Length && Int32.TryParse(data[1], out x)) {
Minor = x;
if (3 <= data.Length && Int32.TryParse(data[2], out x)) {
Build = x;
}
}
}
}
public override string ToString() {
return FileName;
}
// Comparison
public int CompareTo(Version v) {
int c = Major.CompareTo(v.Major);
if (0 == c) {
c = Minor.CompareTo(v.Minor);
}
if (0 == c) {
c = Build.CompareTo(v.Build);
}
return c;
}
}
Testprogramm:
string [] files = new string[] {"10.6.1_Patch","3.5_CoreScript","3.5.1_Patch","3.6_Patch","10.6_Patch", "test", "01_1_ALTER_TC_EDB_V3", "01_2_ALTER_TC_EDB_V3"};
Version [] versions = new Version[files.Length];
for (int i = 0; i < files.Length; i++) {
versions[i] = new Version(files[i]);
}
Array.Sort(versions);
foreach (var v in versions) {
Console.WriteLine(v.ToString());
}
Ausgang:
test
01_1_ALTER_TC_EDB_V3
01_2_ALTER_TC_EDB_V3
3.5_CoreScript
3.5.1_Patch
3.6_Patch
10.6_Patch
10.6.1_Patch
ja, ich habe Sie aber auf dieser alphanumerischen Teil nicht sicher .. –
Sie sollten zeigen, was Sie versucht haben oder Ihre Frage wird erhalten wegen mangelnder Anstrengung abgelehnt und wahrscheinlich geschlossen. Außerdem sollten Sie genau angeben, wie Ihre Sortierung funktionieren soll. Ich nehme an, dass Sie nach der Version wie Zahlen vor dem Unterstrich und dann nach dem Text sortieren wollen, aber was ist, wenn es eine Datei ohne die Versionsnummern gibt, würde das zuerst oder zuletzt kommen? – juharr