○VB.net 構造体のソートと検索
ロジックはクイックソートだと思われます
カスタム比較演算子を使用しています
ClassをStructureに読み変えても動きます
■構造体を入れたArrayListのソート
Module Module1
Sub Main()
Dim ar As New System.Collections.ArrayList
ar.Add(New cell(5, "5です"))
ar.Add(New cell(6, "6です"))
ar.Add(New cell(7, "7です"))
ar.Add(New cell(8, "8です"))
ar.Add(New cell(9, "9です"))
ar.Add(New cell(0, "0です"))
ar.Add(New cell(1, "1です"))
ar.Add(New cell(2, "2です"))
ar.Add(New cell(3, "3です"))
ar.Add(New cell(4, "4です"))
ar.Sort(New testCompare) 'カスタム比較演算子を指定してソート
Dim i As Integer
For i = 0 To ar.Count - 1
Console.WriteLine((CType(ar(i), cell)).str)
Next
Console.Read()
End Sub
End Module
'カスタム比較演算子
Public Class testCompare : Implements System.Collections.IComparer
Public Function Compare(ByVal right As Object, ByVal left As Object) As Integer Implements IComparer.Compare
' right > left : 正の値を返す。
' right == left : 0を返す。
' right < left : 負の値を返す
Return (CType(right, cell)).i - (CType(left, cell)).i
End Function
End Class
Public Class cell
Public i As Integer
Public str As String
Public Sub New(ByVal a As Integer, ByVal b As String)
i = a
str = b
End Sub
End Class
処理結果
0です
1です
2です
3です
4です
5です
6です
7です
8です
9です
■構造体を入れたArrayListの検索
Module Module1
Sub Main()
Dim ar As New System.Collections.ArrayList
ar.Add(New cell(5, "5です"))
ar.Add(New cell(6, "6です"))
ar.Add(New cell(7, "7です"))
ar.Add(New cell(8, "8です"))
ar.Add(New cell(9, "9です"))
ar.Add(New cell(0, "0です"))
ar.Add(New cell(1, "1です"))
ar.Add(New cell(2, "2です"))
ar.Add(New cell(3, "3です"))
ar.Add(New cell(4, "4です"))
ar.Sort(New testCompare) 'カスタム比較演算子を指定してソート BinarySearchはソートが必要
Dim i As Integer = ar.BinarySearch(New cell(4, ""), New testCompare) 'カスタム比較演算子を指定して検索
Console.WriteLine((CType(ar(i), cell)).str)
Console.Read()
End Sub
End Module
'カスタム比較演算子
Public Class testCompare : Implements System.Collections.IComparer
Public Function Compare(ByVal right As Object, ByVal left As Object) As Integer Implements IComparer.Compare
' right > left : 正の値を返す。
' right == left : 0を返す。
' right < left : 負の値を返す
Return (CType(right, cell)).i - (CType(left, cell)).i
End Function
End Class
Public Class cell
Public i As Integer
Public str As String
Public Sub New(ByVal a As Integer, ByVal b As String)
i = a
str = b
End Sub
End Class
処理結果
4です
■消去
Module Module1
Sub Main()
Dim ar As New System.Collections.ArrayList
ar.Add(New cell(0, "0です"))
ar.Add(New cell(1, "1です"))
ar.Add(New cell(2, "2です"))
ar.Add(New cell(3, "3です"))
ar.Add(New cell(4, "4です"))
ar.RemoveAt(3) 'ar(3)の値を消去 ar.Clear() にするとすべての値を消去します。
Dim i As Integer
For i = 0 To ar.Count - 1
Console.WriteLine((CType(ar(i), cell)).str)
Next
Console.Read()
End Sub
End Module
Public Structure cell
Public i As Integer
Public str As String
Public Sub New(ByVal a As Integer, ByVal b As String)
i = a
str = b
End Sub
End Structure
処理結果
0です
1です
2です
4です