Maison > développement back-end > C++ > Comment la méthode OrderBy de LINQ peut-elle être utilisée pour un tri alphanumérique correct des chaînes contenant des nombres ?

Comment la méthode OrderBy de LINQ peut-elle être utilisée pour un tri alphanumérique correct des chaînes contenant des nombres ?

Barbara Streisand
Libérer: 2024-12-27 20:51:16
original
879 Les gens l'ont consulté

How Can LINQ's OrderBy Method Be Used for Correct Alphanumeric Sorting of Strings Containing Numbers?

Tri alphanumérique à l'aide de LINQ : comprendre l'influence des valeurs numériques

Problème :

Étant donné un tableau de chaînes où se termine chaque élément avec une valeur numérique, le but est de trier le tableau par ordre alphanumérique, en priorisant l'ordre numérique au sein de chaque element.

Exemple :

Considérez le tableau de chaînes :

partNumbers = ["ABC10", "ABC1", "ABC2", "ABC11", "ABC10", "AB1", "AB2", "Ab11"]
Copier après la connexion

À l'aide de la méthode OrderBy de LINQ, le résultat de tri souhaité est :

["AB1", "AB2", "AB11", ... ]
Copier après la connexion
Copier après la connexion

Problème :

Cependant, le mécanisme de tri par défaut considère les nombres comme des chaînes, ce qui donne le résultat suivant :

["AB1", "Ab11", "AB2", "ABC1", "ABC10", "ABC10", "ABC11", "ABC2"]
Copier après la connexion

Solution :

Pour remédier à ce problème, il est nécessaire de rembourrer la partie numérique des chaînes dans la clause de commande. De cette façon, OrderBy considère les nombres comme tels, et non comme des chaînes. L'extrait de code suivant illustre cette approche :

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

Méthode PadNumbers :

La méthode PadNumbers est implémentée 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

Explication :

Cette méthode identifie et complète tous les chiffres séquences dans la chaîne d'entrée avec des zéros, en supposant une longueur maximale de 10 chiffres. Ce remplissage garantit que les valeurs numériques sont traitées comme des nombres pendant le processus de commande, tandis que les données de la chaîne d'origine sont préservées.

Sortie :

En utilisant la méthode PadNumbers, le tableau est correctement trié comme :

["AB1", "AB2", "AB11", ... ]
Copier après la connexion
Copier après la connexion

En appliquant Cette technique de remplissage, vous pouvez obtenir un tri alphanumérique précis avec LINQ, où les valeurs numériques sont hiérarchisées dans chaque élément.

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