- 日時: 2011/04/05 11:00
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[アルゴリズム][][] * * キーワード:構造体,配列,ソート,並べ替え,, * ***********************************************************************************
----------------------------------------------------------------------------------- ソートのパターンを変更するコード - 特攻隊長まるるう 2004/03/18-17:53 No.779 ----------------------------------------------------------------------------------- 興味があったのでちょっと触らせてもらいました。 大変勉強になりました。 タートルさん、魔界の仮面弁士さん、ありがとうございます。
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click Dim a(2) As MyUDT MyUDT.Pattern = 1 a(0) = New MyUDT("CCC", "BBB") a(1) = New MyUDT("BBB", "AAA") a(2) = New MyUDT("A", "GGG") Array.Sort(a) MyUDT.Pattern = 2 Array.Sort(a) End Sub
Protected Friend Structure MyUDT : Implements System.IComparable Friend Code As String, Name As String Shared Pattern As Integer Friend Sub New(ByVal Code As String, ByVal Name As String) Me.Code = Code Me.Name = Name End Sub Private Overloads Function CompareTo(ByVal obj As Object) _ As Integer Implements System.IComparable.CompareTo Dim cmp As Integer Try Dim X As MyUDT = DirectCast(obj, MyUDT) Select Case Me.Pattern Case 1 cmp = Me.Code.CompareTo(X.Code) If cmp = 0 Then cmp = Me.Name.CompareTo(X.Name) End If Return cmp Case 2 cmp = Me.Code.CompareTo(X.Name) If cmp = 0 Then cmp = Me.Name.CompareTo(X.Code) End If Return cmp Case Else cmp = Me.Code.CompareTo(X.Code) If cmp = 0 Then cmp = Me.Name.CompareTo(X.Name) End If Return cmp End Select Catch Return 0 End Try End Function
End Structure
-----------------------------------------------------------------------------------
降順ソートの場合下記のようにソート後、Reverse する事で降順になります。 速度的に倍かかるように思われがちですが、条件等にもよりますが、誤差の範囲程度です。 (見た目では区別がつきません)
Array.Sort(a) Array.Reverse(a) 'これを追加しても処理速度的にはあまり大差がない
---- by 花ちゃん ----
|