タイトル : 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の並びが ばらばらになっているのです。 どなたか原因をご指摘いただけないでしょうか? よろしくお願いします。 |