【问题标题】:Vb.net Sorting list [duplicate]Vb.net排序列表[重复]
【发布时间】:2018-04-28 11:19:34
【问题描述】:

和 DN125我有一个包含以下值的列表:

   DN32
   DN100
   DN50
   DN80
   DN125
   DN65

我想按以下方式对这个列表进行排序:

DN125       
DN100
DN80     
DN65   
DN50   
DN32

我尝试使用:

list.sort()
list.reverse()

但这导致 DN100 和 DN125 出现在列表的末尾。那么我该如何按我想要的方式排序呢?

【问题讨论】:

  • 您需要一个自定义比较来了解您需要的排序。请参阅Array.Sort 文档。(正确的重载将取决于您未显示的数组的详细信息)。

标签: vb.net list sorting


【解决方案1】:

由于列表包含字符串,List.Sort 将执行字母数字排序。您想按字母顺序对第一部分进行排序,并按数字对数字部分进行排序,例如 Windows 资源管理器。

如果这种格式是固定的(前 2 个字母是字母,其余是整数),您可以使用这种 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 不使用反向但 OrderByDescending
  • 这也有效,为我节省了一行代码:)
  • @Flyer:它不仅为您节省了一行。如果要对与数字部分不同的 ltter 部分进行排序,也可以使用 ThenByDescending。它也更有效,因为末尾的 list.Sort 将再次对整个列表进行排序,因此再次执行相同的过程。
猜你喜欢
  • 1970-01-01
  • 2019-09-18
  • 2019-05-15
  • 1970-01-01
  • 2019-11-29
  • 2018-02-13
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多