Maison > développement back-end > C++ > Comment puis-je trier correctement les chaînes alphanumériques avec des suffixes numériques à l'aide de LINQ ?

Comment puis-je trier correctement les chaînes alphanumériques avec des suffixes numériques à l'aide de LINQ ?

Barbara Streisand
Libérer: 2025-01-03 03:47:42
original
737 Les gens l'ont consulté

How Can I Sort Alphanumeric Strings with Numeric Suffixes Correctly Using LINQ?

Tri alphanumérique avec LINQ

Le tri des chaînes alphanumériques, où chaque élément se termine par une valeur numérique, peut être difficile avec le mécanisme de tri par défaut de LINQ. Le problème survient lorsque l'on s'appuie uniquement sur l'ordre alphabétique, ce qui entraîne des résultats de tri inattendus.

Considérez le tableau de chaînes suivant :

string[] partNumbers = new string[] { "ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11" };
Copier après la connexion

L'application directe de la méthode OrderBy de LINQ produira le résultat trié suivant :

AB1
Ab11
AB2
ABC1
ABC10
ABC10
ABC11
ABC2
Copier après la connexion

Ce résultat s'écarte de l'attente souhaitée car les valeurs numériques à la fin ne sont pas prises en compte correctement.

Solution

Pour réaliser le tri souhaité, il est nécessaire de remplir les parties numériques des chaînes dans la clé de tri. Cela peut être accompli avec une méthode personnalisée, telle que PadNumbers, définie comme suit :

public static string PadNumbers(string input)
{
    return Regex.Replace(input, "[0-9]+", match => match.Value.PadLeft(10, '0'));
}
Copier après la connexion

Cette méthode remplace toute séquence numérique dans la chaîne d'entrée par son équivalent complété. En utilisant cette méthode dans la clause OrderBy, les parties numériques sont effectivement normalisées pour comparaison :

var result = partNumbers.OrderBy(x => PadNumbers(x));
Copier après la connexion

Cette approche garantit que les valeurs numériques sont traitées de manière égale, quelle que soit leur longueur, ce qui entraîne le tri alphanumérique souhaité :

AB1
AB2
AB11
...
Copier après la connexion

Bien que cette solution suppose un nombre maximum de chiffres pour les nombres, elle fournit une méthode robuste pour le tri alphanumérique en utilisant LINQ.

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