tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル ArrayListのソート
投稿日: 2004/11/25(Thu) 17:32
投稿者みけ
[OSのVer]:Windows2000 Professional [VBのVer]:VB.NET2003

いつも参考にさせていただいてます。

以下のコードで、ArrayListに2次元配列を追加しソートしようとしています。
ソートキーは2次元配列の要素を指定しています。
値の設定されている要素では、うまくソートできるのですが
設定されていない(Nothingの)要素では、ソート結果が思うようにならないのです。

(フォームにソートボタンを貼付けています。)

    Private Sub btnSort_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnSort.Click
        Dim arrList As New ArrayList

        Dim i As Integer

        For i = 0 To 9
            Dim strTable(1, 0) As String
            strTable(0, 0) = i.ToString
            arrList.Add(strTable)
        Next

        Console.WriteLine("番号が設定されているインデックスで降順にソート")
        arrList.Sort(New IArrayComparer(0, 0, -1))

        For i = 0 To 9
            Console.WriteLine(arrList.Item(i)(0, 0))
        Next

        Console.WriteLine("ヌル値が設定されているインデックスで降順にソート")
        arrList.Sort(New IArrayComparer(1, 0, -1))

        For i = 0 To 9
            Console.WriteLine(arrList.Item(i)(0, 0))
        Next
    End Sub

    'ArrayListの2次元配列をソートするインターフェース
    Private Class IArrayComparer
    Implements IComparer
        Private m_intRow As Integer
        Private m_intCol As Integer
        Private m_shtSort As Short

        Public Sub New(ByVal intRow As Integer, ByVal intCol As Integer _
                        , ByVal shtSort As Short)
            m_intRow = intRow
            m_intCol = intCol
            m_shtSort = shtSort
        End Sub
        Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements

IComparer.Compare

            Dim objX(,) As Object = CType(x, Object(,))
            Dim objY(,) As Object = CType(y, Object(,))

            Dim objValueX As Object = objX(m_intRow, m_intCol)
            Dim objValueY As Object = objY(m_intRow, m_intCol)

            Dim intRet As Integer

            intRet = String.Compare(objValueX, objValueY)

            If m_shtSort = -1 Then    '降順
                intRet = -intRet
            End If

            Console.WriteLine("Compare:" & intRet.ToString & " X:&qu
ot; & objValueX & " Y:" &
objValueY)
            Return intRet

        End Function
    End Class

実行結果は、ヌル値が設定されている要素で降順にソートしても
ソートされないはずなんですが、元のArrayListの並びが
ばらばらになっているのです。
どなたか原因をご指摘いただけないでしょうか?
よろしくお願いします。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。