tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
構造体配列のソート(ソートのパターンを変更)(VB.NET)_1 ( No.1 )  [親スレッドへ]
日時: 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 花ちゃん ----  




 [スレッド一覧へ] [親スレッドへ]