输入:
SHC 111U,SHB 22x,, SHA 5555G
所需输出:
SHB 22X, SHC 111U, SHA 5555G
我需要在停车区仅对车辆编号
进行排序,不包括前缀和后缀字母。
输入:
SHC 111U,SHB 22x,, SHA 5555G
所需输出:
SHB 22X, SHC 111U, SHA 5555G
我需要在停车区仅对车辆编号
进行排序,不包括前缀和后缀字母。
没有内置的功能可以实现这一点,但您可以通过先提取数字并基于此进行排序来实现。例如:
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);
}
}
这段代码未经测试(并且可能需要修改才能编译),没有错误检查,可能不是世界上最快的方法,但应该能给你一个想法。
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);
}
}
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);
}
}