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