Fee*_*del 2 vb.net arrays sorting list
我正在尝试将字符串列表按非常特殊的顺序排序。我有一个项目列表,格式为“ X123XXX”,其中X可以是字母,而123可以是任何数字。
Dim AList As New List(Of String)
AList.Add("B200")
AList.Add("A100X")
AList.Add("A100XY")
AList.Add("A100XYZ")
AList.Sort()
'Actual Return in order (AList(1).tostring etc.)
'A100X
'A100XY
'A100XYZ
'B200
'Desired Return
'A100XYZ
'A100XY
'A100X
'B200
Run Code Online (Sandbox Code Playgroud)
我的问题是,不仅需要对数字升序和字母降序进行排序,而且还需要对第一个字母升序进行排序。
我希望,因为各部分始终采用相同的格式(字母+ 3个数字+可选的最多3个字母)-我可以选择前4个,然后对ASC进行排序,然后对最后3个进行排序。不知道如何在vb.net中做到这一点。我四处张望,只能找到IComparable的东西,似乎不太有用。
你可以得到你想要的依靠一些LINQ方法(OrderBy,ThenBy等); 它们允许您执行所需的所有修改。
代码交付您想要的:
AList = AList.OrderBy(Function(x) x.Substring(0, 1)).ThenBy(Function(x) Convert.ToInt32(x.Substring(1, 3))).ThenByDescending(Function(x) x.Substring(4)).ToList()
Run Code Online (Sandbox Code Playgroud)
更新
上面的代码按字母降序对最后一部分(即从第5位到末尾的字母)进行排序;但显然,OP希望根据字符串的长度(即最长的一个优先和最短的一个最后)执行最后的排序。下面的代码提供了这样的行为:
AList = AList.OrderBy(Function(x) x.Substring(0, 1)).ThenBy(Function(x) Convert.ToInt32(x.Substring(1, 3))).ThenByDescending(Function(x) x.Substring(4).Length).ToList()
Run Code Online (Sandbox Code Playgroud)