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!