それを実現するためには、次のようにIComparerインターフェースを利用すると良いです。
例えば、ある文字列を保持するプロパティ(ManagedString)を持つクラス(StringManager)があるとします。
このStringManagerのManagedStringプロパティに保持された文字列の長さが短い順にソートしたい場合は次のようにします。
IComparer.Compareメソッドは、次のようなルールに基づき実装します。
・x < y のとき、負の値を返す。
・x = y のとき、0を返す。
・x > y のとき、正の値を返す。
このルールに基づいて、独自の実装を行ったのがManagedStringComparerです。
Public Class ManagedStringComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements ICompare.Compare
Dim strx As StringManager = DirectCast(x, StringManager)
Dim stry As StringManager = DirectCast(y, StringManager)
'保持している文字列の文字列長が短い方を小とします。(ソートしたとき先に並ぶ)
Return strx.ManagedString.Length - stry.ManagedString.Length
End Function
End Class
あとは、ArrayクラスのSortメソッドにStringManagerクラスとManagedStringComparerクラスを渡すだけです。
Dim strmng As StringManager() = { _
New StringManager("abc"), _
New StringManager("d"), _
New StringManager("efgh") _
}
Dim mngdstrcomp As IComparer = New ManagedStringComparer()
Array.Sort(strmng, mngdstrcomp)
ソート後のstrmngの内容を出力すると次のようになっています。
d
abc
efgh
※注
当ブログのTipsは、@IT等の情報サイトの内容を参考にして構成された記事
もあります。Tipsの内容に著作権等権利を侵害する内容があった場合には、
告知して下さい。早急に訂正または削除にて対応したいと思います。
このStringManagerのManagedStringプロパティに保持された文字列の長さが短い順にソートしたい場合は次のようにします。
IComparer.Compareメソッドは、次のようなルールに基づき実装します。
・x < y のとき、負の値を返す。
・x = y のとき、0を返す。
・x > y のとき、正の値を返す。
このルールに基づいて、独自の実装を行ったのがManagedStringComparerです。
Public Class ManagedStringComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements ICompare.Compare
Dim strx As StringManager = DirectCast(x, StringManager)
Dim stry As StringManager = DirectCast(y, StringManager)
'保持している文字列の文字列長が短い方を小とします。(ソートしたとき先に並ぶ)
Return strx.ManagedString.Length - stry.ManagedString.Length
End Function
End Class
あとは、ArrayクラスのSortメソッドにStringManagerクラスとManagedStringComparerクラスを渡すだけです。
Dim strmng As StringManager() = { _
New StringManager("abc"), _
New StringManager("d"), _
New StringManager("efgh") _
}
Dim mngdstrcomp As IComparer = New ManagedStringComparer()
Array.Sort(strmng, mngdstrcomp)
ソート後のstrmngの内容を出力すると次のようになっています。
d
abc
efgh
※注
当ブログのTipsは、@IT等の情報サイトの内容を参考にして構成された記事
もあります。Tipsの内容に著作権等権利を侵害する内容があった場合には、
告知して下さい。早急に訂正または削除にて対応したいと思います。