Private Sub リストテスト()
Dim a As New List(Of String) ‘ジェネリックのリスト(文字列の例)
Dim idx As Integer
‘リストに追加
a.Add(“あ”)
a.Add(“う”)
a.Add(“い”)
‘リスト内に要素があるか調査(Containsメソッド)
Dim str1 As String = “い”
If a.Contains(“い”) Then
MessageBox.Show(“い 発見”, “Containsメソッド”, MessageBoxButtons.OK)
Else
MessageBox.Show(“い 無し”, “Containsメソッド”, MessageBoxButtons.OK)
End If
‘リスト内での要素の位置を調査(IndexOfメソッド)
idx = a.IndexOf(“い”)
If idx >= 0 Then
MessageBox.Show(“い の位置=” + idx.ToString, “IndexOfメソッド”, MessageBoxButtons.OK)
Else
MessageBox.Show(“い 無し”, “IndexOfメソッド”, MessageBoxButtons.OK)
End If
‘上記ContainsやIndexOfは要素数が大きいと遅い.
‘そんな時は要素数が大きくても速いBinarySearchを使う.
‘しかしBinarySearchはあらかじめソートされている必要がある.
‘リスト内での要素の位置を調査(BinarySearchメソッド)
a.Sort() ‘ソートしないと結果がおかしくなる
idx = a.BinarySearch(“い”)
If idx >= 0 Then
MessageBox.Show(“い の位置=” + idx.ToString, “BinarySearchメソッド”, MessageBoxButtons.OK)
Else
MessageBox.Show(“い 無し”, “BinarySearchメソッド”, MessageBoxButtons.OK)
End If
‘BinarySearchその2
‘要素をソートしながら追加する方法
‘こうすると最初からソートされているのでSortメソッドを使う必要がない.
a.Clear()
idx = a.BinarySearch(“あ”)
If idx < 0 Then
idx = idx Xor -1
a.Insert(idx, “あ”)
End If
idx = a.BinarySearch(“う”)
If idx < 0 Then
idx = idx Xor -1
a.Insert(idx, “う”)
End If
idx = a.BinarySearch(“い”)
If idx < 0 Then
idx = idx Xor -1
a.Insert(idx, “い”)
End If
idx = a.BinarySearch(“い”) ‘ソートされているので問題なし
If idx >= 0 Then
MessageBox.Show(“い の位置=” + idx.ToString, “BinarySearchその2”, MessageBoxButtons.OK)
Else
MessageBox.Show(“い 無し”, “BinarySearchその2”, MessageBoxButtons.OK)
End If
End Sub