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
Barbara Streisandoriginal
2024-12-27 20:51:16924parcourir

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"]

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

["AB1", "AB2", "AB11", ... ]

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"]

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

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

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", ... ]

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!

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