Vb.net排序列表
和DN125I具有具有以下值的列表:Vb.net排序列表,vb.net,list,sorting,Vb.net,List,Sorting,和DN125I具有具有以下值的列表: DN32 DN100 DN50 DN80 DN125 DN65 我想按以下方式对该列表进行排序: DN125 DN100 DN80 DN65 DN50 DN32 我尝试使用: list.sort() list.reverse() 但这导致DN100和DN125最终出现在列表的末尾。那么我如何才能按照我想要的方式对其进行排序呢?因为列表包含字符串,list.sort将执行字母数字排序
DN32
DN100
DN50
DN80
DN125
DN65
我想按以下方式对该列表进行排序:
DN125
DN100
DN80
DN65
DN50
DN32
我尝试使用:
list.sort()
list.reverse()
但这导致DN100和DN125最终出现在列表的末尾。那么我如何才能按照我想要的方式对其进行排序呢?因为列表包含字符串,
list.sort
将执行字母数字排序。您希望按字母顺序对第一部分进行排序,并按数字顺序对数字部分进行排序,就像windows资源管理器一样
如果此格式为fix(前两个字母为字母,其余为整数),则可以使用此LINQ方法:
list = list.
Select(Function(s) New With {.String = s, .Letters = s.Remove(2), .Number = Int32.Parse(s.Substring(2))}).
OrderBy(Function(x) x.Letters).
ThenBy(Function(x) x.Number).
Select(Function(x) x.String).
ToList()
由于列表包含字符串,
list.Sort
将执行字母数字排序。您希望按字母顺序对第一部分进行排序,并按数字顺序对数字部分进行排序,就像windows资源管理器一样
如果此格式为fix(前两个字母为字母,其余为整数),则可以使用此LINQ方法:
list = list.
Select(Function(s) New With {.String = s, .Letters = s.Remove(2), .Number = Int32.Parse(s.Substring(2))}).
OrderBy(Function(x) x.Letters).
ThenBy(Function(x) x.Number).
Select(Function(x) x.String).
ToList()
您需要一个自定义比较,以了解您所需的顺序。请参阅文档。(正确的重载将取决于您未显示的阵列的详细信息)。您需要一个自定义的比较,以了解所需的顺序。请参阅文档。(正确的重载将取决于您未显示的数组的详细信息)。工作起来很有魅力!谢谢添加了一个list.Reverse()来交换顺序,现在它很完美。@Fyer Zero不要使用Reverse,但orderbydegenerating也可以,它为我保存了一行代码:)@Flyer:它不仅为你保存了一行代码。如果要将LTER部分排序为与数字部分不同的部分,也可以使用
然后使用降序。它也更有效,因为最后的list.Sort
会再次对整个列表进行排序,所以同样的过程再次进行。效果非常好!谢谢添加了一个list.Reverse()来交换顺序,现在它很完美。@Fyer Zero不要使用Reverse,但orderbydegenerating也可以,它为我保存了一行代码:)@Flyer:它不仅为你保存了一行代码。如果要将LTER部分排序为与数字部分不同的部分,也可以使用然后使用降序。它的效率也更高,因为最后的list.Sort
会再次对整个列表进行排序,所以同样的过程会再次进行。