Back to Top

プログラムの覚書

Category: VB.NET

VB.NET

VB.NET ArrayListのジェネリッククラス

ArrayListのジェネリック版List・LinkedList・Stack・Queueの説明をします。

インスタンス化するときに、データ型を指定するので、取り出すときキャストする必要がありません。どんなデータ型でも使用できます。

注意としては、もともとオブジェクト型なので、Stringでインスタンス化しても他の型のデータも受け入れてしまうところです。

Listクラス

'String型のListとしてインスタンス化
Dim strList As New List(Of String)

strList.Add("AAA")
strList.Add("BBB")

'インデックスによる参照(キャスト不要)
Dim s As String = strList(1)

'Integer型のListとしてインスタンス化
Dim intList As New List(Of Integer)

intList.Add(100)
intList.Add(200)

Dim v As Integer = intList(1)

LinkedListクラス

Listのようにインデックスによるデータの参照はできませんが、リストの途中への要素の削除と挿入が高速にできます。

Dim strLinkList = New LinkedList(Of String)

'1つ目の要素を追加
strLinkList.AddFirst("First")

'先頭の要素の後に追加
strLinkList.AddAfter(strLinkList.First, "After")

'すべての要素を順番に表示
For Each s In strLinkList
    MessageBox.Show(s)
Next

Stackクラス

先入れ後出しのクラスです。

Dim intStack = New Stack(Of Integer)

'要素を追加
intStack.Push(100)
intStack.Push(200)
intStack.Push(300)

'先頭の要素を取得して削除
Dim v1 As Integer = intStack.Pop()

'先頭の要素を取得(削除しません)
Dim v2 As Integer = intStack.Peek()

'要素を全て削除
intStack.Clear()

Queueクラス

先入れ先出しのクラスです。

Dim intQueue = New Queue(Of Integer)

'要素を追加
intQueue.Enqueue(100)
intQueue.Enqueue(200)
intQueue.Enqueue(300)

'先頭の要素を取得して削除
Dim q1 As Integer = intQueue.Dequeue()

'先頭の要素を取得
Dim q2 As Integer = intQueue.Peek()

'すべての要素の削除
intQueue.Clear()

 

 

VB.NETハッシュテーブル(連想配列)

ハッシュテーブルは、キーと値を保持しているコレクションです。

値は文字列型・数値型・オブジェクト型の様々なデータを保持できます。

キーは文字列扱いで、値はオブジェクト扱いなので値を取り出すときはキャストします。

使用するには、Imports System.Collectionsを追加します。

項目を追加する

Dim hTbl As New Hashtable()

'文字列型の場合
hTbl.Add("H", "平成")
hTbl.Add("S", "昭和")
hTbl.Add("M", "明治")
hTbl.Add("T", "大正")


'数値型の場合
hTbl.Add("H", 100)
hTbl.Add("S", 200)
hTbl.Add("M", 300)
hTbl.Add("T", 400)

キーや値の存在チェック

ContainsValueメソッドおよびContainsKeyメソッド、存在チェックをする。

'値が存在すれば、Trueを、存在しなければ、Falseを返します。
If hTbl.ContainsValue("昭和") Then
    MessageBox.Show("値は存在します")
End If

'値が存在すれば、Trueを、存在しなければ、Falseを返します。
If hTbl.ContainsKey("H") Then
    MessageBox.Show("キーは存在します")
End If

テーブル内の値の取得する

値取得にはキャストをします。

文字列の場合
Dim str1 As String = CStr(hTbl("H"))
または
Dim str1 As String = CType(hTbl(H"), String)

数値の場合
Dim val1 As Integer = CInt(hTbl("H"))
または
Dim val1 As Integer = CType(hTbl("H"), Integer)

テーブルのループ

Dim hTbl As New Hashtable()

'文字列型
hTbl.Add("H", "平成")
hTbl.Add("S", "昭和")
hTbl.Add("M", "明治")
hTbl.Add("T", "大正")

Dim s As String = ""

'キーによるループ
For Each key As String In hTbl.Keys
    s &= String.Format("{0}:{1}", key, hTbl(key)) & System.Environment.NewLine
Next
MessageBox.Show(s)

'値によるループ
For Each val As String In hTbl.Values
    s &= String.Format("{0}", val) & System.Environment.NewLine
Next
MessageBox.Show(s)

'テーブルのループ
For Each de As DictionaryEntry In hTbl
    s &= String.Format("{0}:{1}", de.Key, de.Value) & System.Environment.NewLine
Next
MessageBox.Show(s)