VB.NETのListの使い方のサンプルです。
(確認環境:Microsoft Visual Studio Community 2019)
目次
Listクラスとは
Dim color As New List(Of String) color.Add("red") color.Add("blue") Console.WriteLine(color(0)) 'red |
上記はListクラスをインスタンス化して変数colorに代入しています。
この変数colorは複数の値を持てるようになります。
変数colorの各値のデータ型はStringです。((Of String)のため)
リストの変数の図
- 1つの変数で複数の値を管理できます。
- 値にインデックスを使用してアクセスできます。
- 追加や削除などの操作もできます。
- 以下はMicrosoftのListクラスのリンクです。
https://docs.microsoft.com/ja-jp/dotnet/api/system.collections.generic.list-1?view=netframework-4.8
要素に初期値をセットする
Module Module1
Sub Main()
Dim a As New List(Of String)(New String() {"赤", "黄", "青"})
For Each b As String In a
Console.WriteLine(b) '赤 黄 青と出力される
Next
End Sub
End Module
3行目は、Listクラスをインスタンス化し、かつ初期値をセットしています。
5~7行目は、For Each文で値を取得しています。
要素を取得する
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
Console.WriteLine(a(1)) '黄と出力される
End Sub
End Module
8行目は、(1)で要素の位置を指定して要素を取得しています。
要素の位置は、赤=0、黄=1、青=2です。
要素をすべて取得する(For文/For Each文)
Module Module1
Sub Main()
Dim color As New List(Of String)
color.Add("赤")
color.Add("黄")
color.Add("青")
For i = 0 To color.Count - 1
Console.WriteLine(color(i)) ' 赤 黄 青が出力される
Next i
For Each b In color
Console.WriteLine(b) '赤 黄 青が出力される
Next
End Sub
End Module
8行目は、For文ですべての要素を取得しています。
12行目は、For Each文ですべての要素を取得しています。
要素数が0の場合
Dim color As New List(Of String)
For Each c1 In color
Console.WriteLine(c1) '出力されない エラーにならない
Next
ループ対象のオブジェクトの要素数が0の場合でFor Eachの処理を行った場合は、エラーにはならず、出力もされません。
インデックスを取得する(IndexOfメソッド)
Public Function IndexOf(item As T) As Integer |
指定した値のインデックスを取得するサンプルです。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
Console.WriteLine(a.IndexOf("黄")) '1が出力される
End Sub
End Module
8行目は、IndexOfメソッドで指定の値があるインデックスを取得します。
インデックスは0から始まります。
指定の要素があるかを返す (Containsメソッド)
Public Function Contains(item As T) As Boolean |
指定の要素があるかを返すサンプルです。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
If a.Contains("青") Then
Console.WriteLine("Trueです") 'Trueですと出力される
End If
End Sub
End Module
8行目は、Containsメソッドで指定の要素があるかを取得しています。
ある場合trueになります。
要素数を取得する (Countプロパティ)
Public ReadOnly Property Count As Integer |
要素数を取得するサンプルです。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
Console.WriteLine(a.Count) '3と出力される
End Sub
End Module
8行目は、Countプロパティで要素数を取得しています。
末尾に要素を追加する(Addメソッド)
Public Sub Add(item As T) |
Addメソッドは、リストの末尾に要素を追加します。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
For Each b As String In a
Console.WriteLine(b) '赤 黄 青と出力される
Next
End Sub
End Module
3行目は、Listクラスをインスタンス化しています。
5~7行目は、Addメソッドでリストの末尾に要素を追加しています。
9~11行目は、For Each文で値を取得しています。
位置を指定して要素を追加する(Insertメソッド)
Public Sub Insert(index As Integer, item As T) |
Insertメソッドは、リストの位置を指定して要素を追加します。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
a.Insert(0, "オレンジ")
For Each b As String In a
Console.WriteLine(b) 'オレンジ 赤 黄 青と出力される
Next
End Sub
End Module
3行目は、Listクラスをインスタンス化しています。
8行目は、Insertメソッドでリストの位置を指定して要素を追加しています。先頭の位置は0です。
10~12行目は、For Each文で値を取得しています。
要素を置き換える
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
a(2) = "オレンジ"
For Each b As String In a
Console.WriteLine(b) '赤 黄 オレンジと出力される
Next
End Sub
End Module
8行目は、(2)で要素の位置を指定して要素を置き換えています。
要素の位置は、赤=0、黄=1、青=2です。
要素を削除する-インデックスを指定(RemoveAtメソッド)
Public Sub RemoveAt(index As Integer) |
RemoveAtメソッドは、インデックスを指定して要素を削除します。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
a.RemoveAt(0)
For Each b As String In a
Console.WriteLine(b) '黄 青と出力される
Next
Console.WriteLine(a(0)) '黄と出力される
Console.WriteLine(a(1)) '青と出力される
End Sub
End Module
8行目は、RemoveAtメソッドでインデックスの0(赤)を指定して削除しています。
削除後のインデックス値は前につまります。
要素を削除する-値を指定(Removeメソッド)
Public Function Remove(item As T) As Boolean |
Removeメソッドは、値を指定して要素を削除します。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
a.Remove("黄")
For Each c As String In a
Console.WriteLine(c) '赤 青と出力される
Next
Console.WriteLine(a(0)) '赤と出力される
Console.WriteLine(a(1)) '青と出力される
End Sub
End Module
8行目は、Removeメソッドで値を指定して削除しています。
削除後のインデックス値は前につまります。
要素を削除する-範囲を指定(RemoveRangeメソッド)
Public Sub RemoveRange(index As Integer, count As Integer) |
RemoveRangeメソッドは、リストの範囲を指定して要素を削除します。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
a.Add("緑")
a.RemoveRange(1, 2)
For Each b As String In a
Console.WriteLine(b) '赤 緑と出力される
Next
Console.WriteLine(a(0)) '赤と出力される
Console.WriteLine(a(1)) '緑と出力される
End Sub
End Module
9行目は、RemoveRangeメソッドでリストの範囲を指定して要素を削除しています。
1つめの引数はインデックスで、2つめの引数は要素の数です。
削除後のインデックス値は前につまります。
要素をすべて削除する (Clearメソッド)
Public Sub Clear() |
すべての要素を削除するサンプルです。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
a.Clear()
For Each b As String In a
Console.WriteLine(b) '出力されない
Next
End Sub
End Module
8行目は、Clearメソッドですべての要素を削除しています。
要素を逆順にする(Reverseメソッド)
Public Sub Reverse() |
要素を逆順にするサンプルです。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
a.Reverse()
For Each b As String In a
Console.WriteLine(b) '青 黄 赤と出力される
Next
End Sub
End Module
8行目は、Reverseメソッドで要素を逆順にしています。
メソッドの引数と戻り値がリストの場合
メソッドの引数と戻り値がリストの場合です。
Module Module1
Sub Main()
Dim color As New List(Of String)
color.Add("赤")
color.Add("黄")
color.Add("青")
Dim b As List(Of String)
b = printColor(color)
End Sub
'Private Function printColor(c1 As List(Of String)) As List(Of String)
Private Function printColor(c1 As List(Of String))
Return c1
End Function
End Module
9行目は、呼び出し元のメソッドです。引数にリストを指定しています。戻り値もリストです。
13行目は、定義されたメソッドです。「c1 As List(Of String)」のc1が変数で、その後がデータ型のリストです。
12行目のように引数の後に戻り値「As List(Of String)」をつけることもできます。
呼び出し元のメソッドの引数の変数名(9行目のcolor)と定義されたメソッドの引数の変数名(12行目のc1)は異なっていても使用できます。
リストの中にリストがあるサンプル
Module Module1
Sub Main()
Dim list1 As New List(Of List(Of String))
Dim list2 As New List(Of String)
list2.Add("赤")
list2.Add("黄")
list2.Add("青")
Dim list3 As New List(Of String)
list3.Add("red")
list3.Add("yellow")
list3.Add("blue")
list1.Add(list2)
list1.Add(list3)
Console.WriteLine(list1(0)(0)) '赤
Console.WriteLine(list1(0)(1)) '黄
Console.WriteLine(list1(0)(2)) '青
Console.WriteLine(list1(1)(0)) 'red
Console.WriteLine(list1(1)(1)) 'yellow
Console.WriteLine(list1(1)(2)) 'blue
End Sub
End Module
3行目は、リストの中にリストを定義しています。
5~13行目は、通常のリストを作成しています。
15,16行目は、リストにリストを追加しています。
18~23行目は、リストの値を取得しています。
リストから配列にコピーする(ToArrayメソッド)
Public Function ToArray() As T() |
リストから新しい配列にコピーするサンプルです。
Module Module1
Sub Main()
Dim a As New List(Of String)
a.Add("赤")
a.Add("黄")
a.Add("青")
Dim b = a.ToArray()
For Each c As String In b
Console.WriteLine(c) '赤 黄 青と出力される
Next
'b.Add("オレンジ") リストでないのでエラーになる
End Sub
End Module
3~6行目は、リストを作成し値をセットしています。
8行目は、ToArrayメソッドでリストを新しい配列にコピーしています。
14行目は、addメソッドで値を追加しようとしますがリストではなく配列なのでエラーになります。
関連の記事