Maison > développement back-end > C++ > Comment trier les chaînes numériquement tout en conservant l'ordre alphabétique ?

Comment trier les chaînes numériquement tout en conservant l'ordre alphabétique ?

Barbara Streisand
Libérer: 2024-12-31 02:19:14
original
234 Les gens l'ont consulté

How to Sort Strings Numerically While Maintaining Alphabetical Order?

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 :

  1. Utilisez la méthode Enumerable.OrderBy, qui vous permet de spécifier un comparateur personnalisé pour le tri.
  2. Créez une classe qui implémente l'interface IComparer et définit la logique de comparaison strings.
  3. Implémentez la méthode Compare dans la classe de comparaison personnalisée pour déterminer l'ordre des chaînes.
  4. Voici un exemple d'implémentation de la classe SemiNumericComparer qui considère à la fois numérique et alphabétique valeurs :
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);
    }
}
Copier après la connexion
  1. Intégrez le comparateur personnalisé dans votre logique de tri :
string[] things = new string[] { "paul", "bob", "lauren", "007", "90", "101" };

foreach (var thing in things.OrderBy(x => x, new SemiNumericComparer()))
{
    Console.WriteLine(thing);
}
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal