如何用字母数字排序数字

输入:

SHC 111U,SHB 22x ,, SHA 5555G

需要的输出:

SHB 22X,SHC 111U,SHA 5555G

我必须在停车区只排序Vehicle no号码而不是前缀和后缀字母

没有任何内置function可以执行此操作,但您可以通过首先提取数字并根据它进行排序来实现。 例如:

 class VehicleNumberComparer : IComparer { 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); } } 

这是未经测试的(可能甚至不会在没有修改的情况下编译),没有错误检查,可能不是世界上最快的方法,但应该给你一个想法。

如果可以有一个没有数字的盘子,那么你应该检查一下。

 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 data = new List() {"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); } } 

如果这是绝对不可能的,世界末日将会出现之前可能会有一个没有数字的板块,那么这个缩短的forms将起作用:

 static void Main(string[] args) { IEnumerable data = new List() {"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); } } 

这样做的好方法是做这样的事情

编写正则表达式以匹配名称的数字部分,将其放入成对的整数值集合中,第一个是从字符串中提取的数字,第二个是原始列表中数字的索引。 然后排序第二个列表,然后使用集合中的第二个数字重新排序第一个列表。

使用接受IComparer对象的Sort方法并将其传递给您的车辆编号集合。 您需要定义一个实现IComparer的自定义类。 在该类的比较方法中,您可以编写代码来比较两个车辆编号。 您应该使用正则表达式来提取车辆编号的数字部分。