arrays - vb.net - 列表(字符串)排序,数字升序,字母降序

标签 arrays vb.net list sorting

我正在尝试将字符串列表排序为非常特定的顺序。我有一个项目列表,其格式为“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方法(OrderByThenBy等)得到你想要的东西;它们允许您执行所需的所有修改。

代码提供你想要的:

 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/

相关文章:

vb.net - Crystal 报表中每个组的新页面

python - 在什么情况下我会使用元组作为字典键?

javascript - IE11 - 即使我在循环中使用 `let`,变量仍超出范围

java - 在循环数组中找到子序列的第 k 个最小数

vb.net - 我应该使用进口吗?

c# - 获取图像以形式显示 - dll 文件

python - python 中用于 nd 数组的逻辑索引

iphone - NSMutableArray 在索引处从其他数组添加对象

C++ list::sort <未解析的重载函数类型>

Java 列出问题