Comment trier les chaînes par ordre alphabétique tout en préservant les valeurs numériques
Le tri des chaînes par ordre alphabétique peut rencontrer des problèmes lorsque certaines chaînes contiennent des caractères numériques. Si la conversion numérique est interdite, une approche alternative est nécessaire pour gérer ces cas efficacement.
Une solution consiste à utiliser un comparateur personnalisé qui fait la distinction entre les valeurs numériques et non numériques. Ce comparateur peut être transmis à la méthode OrderBy pour personnaliser les critères de tri.
Voici un exemple d'implémentation utilisant la méthode Enumerable.OrderBy et une classe SemiNumericComparer :
using System; using System.Collections.Generic; class Program { static void Main() { string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" }; foreach (var thing in things.OrderBy(x => x, new SemiNumericComparer())) { Console.WriteLine(thing); } } public class SemiNumericComparer: IComparer<string> { /// <summary> /// Determine if a string is a number /// </summary> /// <param name="value">String to test</param> /// <returns>True if numeric</returns> public static bool IsNumeric(string value) { return int.TryParse(value, out _); } /// <inheritdoc /> public int Compare(string s1, string s2) { // Flags to indicate if strings are numeric var IsNumeric1 = IsNumeric(s1); var IsNumeric2 = IsNumeric(s2); // Handle numeric comparisons if (IsNumeric1 && IsNumeric2) { var i1 = Convert.ToInt32(s1); var i2 = Convert.ToInt32(s2); // Order by numerical value if (i1 > i2) { return 1; } if (i1 < i2) { return -1; } return 0; } // Handle cases where only one string is numeric if (IsNumeric1) { return -1; } if (IsNumeric2) { return 1; } // Default to alphabetical comparison return string.Compare(s1, s2, true, CultureInfo.InvariantCulture); } } }
Ce code affichera le chaînes dans l'ordre trié suivant :
007 90 bob lauren paul 101
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!