我有一个我想按最后两个结尾数字分组的项目列表,所以:
127658
012345
123456
123457
123458
012345
将排序为:
012345
012345
123456
123457
123458
127658
这是如何通过重载 list.sort 来实现的?输出与 excel 自动过滤器“ENDS WITH 00”非常相似
我有一个我想按最后两个结尾数字分组的项目列表,所以:
127658
012345
123456
123457
123458
012345
将排序为:
012345
012345
123456
123457
123458
127658
这是如何通过重载 list.sort 来实现的?输出与 excel 自动过滤器“ENDS WITH 00”非常相似
不需要过载。只需使用 lambda:
list.OrderBy(Function(n) Cint(n.toString().Substring(n.toString().Length-2))).
ThenBy(Function(n) n)
这是一个非常完美的解决方案。
正如Steven Doggart指出的那样,您可以检查小于 2 位的数字:
list.OrderBy(Function(n) Cint(n.toString().
Substring(n.toString().Length - Math.Min(n.ToString().Length, 2)))).
ThenBy(Function(n) n)
或者,甚至简单,使用MarcinJuraszek的部分答案:
list.OrderBy(Function(n) n Mod 100).ThenBy(Function(n) n)
看起来很容易。比较功能:
Public Shared Function CompareByLastTwo(x As Integer, y As Integer) As Integer
Return (x Mod 100).CompareTo(y Mod 100)
End Function
和用法:
Dim items as List(Of Integer)
(...)
items.Sort(CompareByLastTwo)
我以为你的物品是Integer
这应该有效(假设 a List(Of String)
):
list = list.Select(Function(num) New With {
.Num = num,
.LastTwo = If(num.Length < 2, num, num.Substring(num.Length - 2))
}).
OrderBy(Function(x) x.LastTwo).
ThenBy(Function(x) x.Num).
Select(Function(x) x.Num).ToList()
如果是List(Of Int32)
相同的方法:
intList = intList.
Select(Function(num) New With {.Num = num, .Str = num.ToString()}).
Select(Function(x) New With {
x.Num,
x.Str,
.LastTwo = If(x.Str.Length < 2, x.Str, x.Str.Substring(x.Str.Length - 2))
}).
OrderBy(Function(x) x.LastTwo).
ThenBy(Function(x) x.Num).
Select(Function(x) x.Num).ToList()