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
Susan Sarandonoriginal
2024-12-29 06:59:15925parcourir

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);

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

AB1
AB2
AB11
...

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

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));

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
...

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!

Déclaration:
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