misc.log

日常茶飯事とお仕事と

Sortメソッドを使えるオブジェクト(IComparableの実装)

自分で作ったクラスを、簡単に並べ替える必要があったので、IComparableをインプリメントしてArrayListやArrayオブジェクトのSortメソッドを適用可能にする方法を調べる。

'比較されるデータを実現するクラス
Public Class EachObj
    Implements IComparable

    'プロパティ用内部変数
    Private innerValue As Integer = 0

    '数値を返すプロパティ
    Public Property Value() As Integer
        Get
            Return innerValue
        End Get
        Set(ByVal NewValue As Integer)
            innerValue = NewValue
        End Set
    End Property

    '比較処理
    Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo

        Dim mineValue As Integer = Me.Value
        Dim targetValue As Integer = CType(obj, EachObj).Value

        If mineValue > targetValue Then
            '相手のほうが小さい場合
            Return 1
        ElseIf mineValue < targetValue Then
            '相手のほうが大きい場合
            Return -1
        Else
            '同じ場合
            Return 0
        End If

    End Function

End Class

判りやすいように、CompareToをIFで書いているが、実際は数字を足し引きして結果を返すだけでよい。CompareToの戻り値は、正負とゼロしか判断していないので、プラス何百だろうと関係ないから。

で、このクラスを複数格納した親クラスを作って、そいつにIEnumerableインターフェイスを実装すれば、For Eachでくるくる回せて、中のソートも簡単なオブジェクトの完成。