我正在尝试将字符串列表排序为非常特定的顺序。我有一个项目列表,其格式为“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
我遇到的问题是,我不仅需要对数字升序和字母降序进行排序,而且还需要对第一个字母升序进行排序。
我希望,由于各部分始终采用相同的格式(字母 + 3 个数字 + 可选最多 3 个字母) - 我可以只选择前 4 个字母,然后对最后 3 个字母进行 ASC 排序,然后进行 DESC 排序。但我不知道如何在 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()
更新
上面的代码按字母降序对最后一部分(即从第 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()
关于arrays - vb.net - 列表(字符串)排序,数字升序,字母降序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33083138/