Entrée:Comment trier dans nombre alphanumérique
111U CSS, SHB 22x ,, SHA 5555G
sortie nécessaire:
SHB 22X, 111U SHC, SHA 5555G
Je dois trier seulement Vehicle no
dans la zone de stationnement non pref ix et la lettre de suffixe
Entrée:Comment trier dans nombre alphanumérique
111U CSS, SHB 22x ,, SHA 5555G
sortie nécessaire:
SHB 22X, 111U SHC, SHA 5555G
Je dois trier seulement Vehicle no
dans la zone de stationnement non pref ix et la lettre de suffixe
fantastique, ouvert bien optimisé la source solution à http://dotnetperls.com/alphanumeric-sorting
Il n'y a rien de intégré pour faire cela, mais vous pouvez le faire en extrayant d'abord les nombres et le tri en fonction de cela. Par exemple:
class VehicleNumberComparer : IComparer<string>
{
public int Compare(string lhs, string rhs)
{
var numExtract = new Regex("[0-9]+");
int lhsNumber = int.Parse(numExtract.Match(lhs).Value);
int rhsNumber = int.Parse(numExtract.Match(rhs).Value);
return lhsNumber.CompareTo(rhsNumber);
}
}
Ceci est non testé (et probablement ne sera pas même compilation sans modification), n'a pas de contrôle d'erreur, et est probablement pas la méthode la plus rapide dans le monde, mais devrait vous donner une idée.
Une bonne façon de le faire serait de faire quelque chose comme ça
Ecrire une expression régulière pour correspondre uniquement la partie numérique du nom, mettez dans une collection de valeurs entières paires, le premier étant le nombre vous avez tiré de votre chaîne et le second étant l'indice du nombre dans la liste originale. Puis trier la deuxième liste, puis réorganiser la première liste en utilisant le deuxième numéro de votre collection.
Merci, je peux essayer – drop
Utilisez une méthode de tri qui accepte un objet IComparer et transmettez-lui votre collection de numéros de véhicule. Vous devrez définir une classe personnalisée qui implémente IComparer. Dans la méthode Compare de cette classe, vous pouvez écrire du code pour comparer les deux numéros de véhicules. Vous devriez probablement utiliser une regex pour extraire la partie numérique du numéro de véhicule.
Merci, votre aide – drop
S'il est possible d'avoir une plaque sans numéro, vous devriez vérifier cela.
static int SortPlate(string plate)
{
int plateNumber;
Regex regex = new Regex(@"\d+");
Int32.TryParse(regex.Match(plate).Value, out plateNumber);
return plateNumber;
}
static void Main(string[] args)
{
IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G", "HOT STUFF"};
var sortedList = from z in data
orderby SortPlate(z)
select z;
foreach (string plate in sortedList)
{
Console.WriteLine(plate);
}
}
S'il est absolument impossible et la fin du monde viendrait avant qu'il ne pourrait jamais être une plaque sans chiffres alors cette forme raccourcie fonctionnera:
static void Main(string[] args)
{
IEnumerable<string> data = new List<string>() {"SHC 111U", "SHB 22x", "SHA 5555G"};
Regex regex = new Regex(@"\d+");
var sortedList = from z in data
orderby Int32.Parse(regex.Match(z).Value)
select z;
foreach (string plate in sortedList)
{
Console.WriteLine(plate);
}
}
Merci pour une bonne référence Article – drop