最後の 2 つの末尾の数字でグループ化したい項目のリストがあるので、次のようにします。
127658
012345
123456
123457
123458
012345
次のように並べ替えます。
012345
012345
123456
123457
123458
127658
これは、list.sort をオーバーロードすることによってどのように達成されますか? 出力は、Excel オートフィルター「ENDS WITH 00」と非常によく似ています。
最後の 2 つの末尾の数字でグループ化したい項目のリストがあるので、次のようにします。
127658
012345
123456
123457
123458
012345
次のように並べ替えます。
012345
012345
123456
123457
123458
127658
これは、list.sort をオーバーロードすることによってどのように達成されますか? 出力は、Excel オートフィルター「ENDS WITH 00」と非常によく似ています。
過負荷は必要ありません。ラムダを使用するだけです:
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