4

最後の 2 つの末尾の数字でグループ化したい項目のリストがあるので、次のようにします。

127658
012345
123456
123457
123458
012345

次のように並べ替えます。

012345
012345
123456
123457
123458
127658

これは、list.sort をオーバーロードすることによってどのように達成されますか? 出力は、Excel オートフィルター「ENDS WITH 00」と非常によく似ています。

4

3 に答える 3

1

過負荷は必要ありません。ラムダを使用するだけです:

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)
于 2013-04-10T15:39:07.763 に答える
0

とても簡単に見えます。比較機能:

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

于 2013-04-10T15:34:33.323 に答える