Maison > développement back-end > C++ > Comment LINQ peut-il réaliser un tri alphanumérique correct des chaînes contenant des nombres ?

Comment LINQ peut-il réaliser un tri alphanumérique correct des chaînes contenant des nombres ?

Susan Sarandon
Libérer: 2024-12-29 06:59:15
original
899 Les gens l'ont consulté

How Can LINQ Achieve Correct Alphanumeric Sorting of Strings Containing Numbers?

Tri alphanumérique à l'aide de LINQ

Lorsque vous traitez des chaînes qui incluent des valeurs numériques, le tri alphabétique par défaut dans LINQ peut ne pas produire les résultats souhaités. Prenons l'exemple suivant :

string[] partNumbers = new string[] 
{ 
    "ABC10", "ABC1","ABC2", "ABC11","ABC10", "AB1", "AB2", "Ab11" 
};

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

Le résultat attendu ordonnerait les chaînes comme suit :

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

Cependant, le résultat réel diffère car l'ordre des chaînes par défaut suit l'ordre lexicographique. Cela signifie que les valeurs numériques sont comparées de gauche à droite, conduisant à l'ordre suivant :

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

Pour obtenir le tri alphanumérique souhaité, nous devons modifier la logique de comparaison. Nous pouvons compléter la partie numérique de chaque chaîne avec un nombre spécifique de zéros. Cela garantit que les valeurs numériques sont comparées équitablement, quelle que soit leur longueur.

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

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

Avec cet ordre modifié, les parties numériques des chaînes sont comparées en fonction de leurs valeurs complétées, ce qui conduit à l'ordre correct suivant :

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

Notez que cette approche suppose un nombre maximum de chiffres pour les nombres en entrée. S'il y a des nombres avec plus de chiffres que le remplissage spécifié, le tri peut ne pas être précis.

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