C#で自作クラスを比較する方法
C#で自作クラスを比較したいと思うことがよくあるので自分用にメモしておきます。
もっと深い理解をしたい方は各自ググってください。
使いたくなるシチュエーション
priority_queueに入れたくなった時とか。
何をすればいいのか
自作クラスにIComparableインターフェースを実装する。
CompareTo関数を定義する。この返り値で大小の比較を定義している。
比較対象(other)よりも小さい場合は負の値を、大きい場合は正の値を、同値の場合は0を返せばよい。
ソースコード(C#)
MyDataという名前の自作クラスを作るとします。
hikakuを比較する際の基準とします。
dataは一緒に入れておきたいデータ(何でもいい)とします。
CompareTo関数では、現在のインスタンスが比較対象(other)よりも小さい場合は負の値を、大きい場合は正の値を、同値の場合は0を返すようにします。
class MyData:IComparable<MyData> { public long data, hikaku; public MyData(long data, long hikaku) { this.data = data; this.place = hikaku; } public int CompareTo(MyData other) { return hikaku.CompareTo(other.hikaku); } }
参考サイト
IComparable.CompareTo メソッド (Object) (System)
自作クラスの配列やコレクションでSortやBinarySearchができるようにする: .NET Tips: C#, VB.NET