Vb.net排序列表

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将执行字母数字排序

和DN125I具有具有以下值的列表:

   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
会再次对整个列表进行排序,所以同样的过程会再次进行。