VB.NET Listの使い方のサンプル

VB.NETのListの使い方のサンプルです。
(確認環境:Microsoft Visual Studio Community 2019)

目次

仕組み Listクラスとは
初期値 要素に初期値をセットする
取得する 要素を取得する
  要素をすべて取得する(For文/For Each文) / 要素数が0の場合
  インデックスを取得する(IndexOfメソッド)
  指定の要素があるかを返す(Containsメソッド)
  要素数を取得する(Countプロパティ)
追加する 末尾に要素を追加する(Addメソッド)
  位置を指定して要素を追加する(Insertメソッド)
更新する 要素を置き換える
削除する 要素を削除する-インデックスを指定(RemoveAtメソッド)
  要素を削除する-値を指定(Removeメソッド)
  要素を削除する-範囲を指定(RemoveRangeメソッド)
  要素をすべて削除する (Clearメソッド)
ソート 要素を逆順にする(Reverseメソッド)
使用する メソッドの引数と戻り値がリストの場合
  リストの中にリストがあるサンプル
配列 リストから配列にコピーする(ToArrayメソッド)

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)のため)

 

リストの変数の図

要素に初期値をセットする

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メソッドで値を追加しようとしますがリストではなく配列なのでエラーになります。

関連の記事

VB.NET 配列の仕組みと使い方のサンプル

△上に戻る