Zeichenfolgen numerisch sortieren und dabei die alphabetische Reihenfolge beibehalten
Um das Problem der Sortierung von Zeichenfolgen zu lösen, die numerisch sind, aber nicht in ganze Zahlen konvertiert werden können, können Sie Folgendes tun Implementieren Sie einen benutzerdefinierten Sortieralgorithmus. So geht's:
public class SemiNumericComparer : IComparer<string> { public static bool IsNumeric(string value) => int.TryParse(value, out _); public int Compare(string s1, string s2) { const int S1GreaterThanS2 = 1; const int S2GreaterThanS1 = -1; var isNumeric1 = IsNumeric(s1); var isNumeric2 = IsNumeric(s2); // Handle numeric comparisons if (isNumeric1 && isNumeric2) { var i1 = Convert.ToInt32(s1); var i2 = Convert.ToInt32(s2); return i1 > i2 ? S1GreaterThanS2 : (i1 < i2 ? S2GreaterThanS1 : 0); } // Handle mixed numeric and non-numeric comparisons if (isNumeric1) return S2GreaterThanS1; if (isNumeric2) return S1GreaterThanS2; // Handle alphabetical comparisons return string.Compare(s1, s2, true, CultureInfo.InvariantCulture); } }
string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" }; foreach (var thing in things.OrderBy(x => x, new SemiNumericComparer())) { Console.WriteLine(thing); }
Mit diesem Ansatz können Sie Zeichenfolgen alphabetisch sortieren und dabei numerische Werte berücksichtigen Werte, was zur gewünschten Ausgabe führt:
007 90 bob lauren paul
Das obige ist der detaillierte Inhalt vonWie sortiere ich Zeichenfolgen numerisch und behalte dabei die alphabetische Reihenfolge bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!