Tri des chaînes numériquement tout en préservant l'ordre alphabétique
Pour résoudre le problème du tri des chaînes qui sont numériques mais ne peuvent pas être converties en nombres entiers, vous pouvez implémenter un algorithme de tri personnalisé. Voici comment procéder :
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); }
Cette approche vous permet de trier les chaînes par ordre alphabétique tout en tenant compte des valeurs numériques. valeurs, résultant en le résultat souhaité :
007 90 bob lauren paul
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!