今回は、VB.NETのListクラスの使い方と具体例をご紹介します。
Listクラスとは
VB.NETのList(Of T)は、要素の型を指定して動的にサイズが変化する配列のような仕組みを提供する、ジェネリックコレクションです。
内部的には配列を利用しており、要素数が増える場合は自動的に容量を拡張してくれます。
型を指定することで、格納できる要素の型を限定し、誤った型を入れてしまうミスを防止しながら効率的なコレクション操作を実現します。
このように、可変長かつ型安全な仕組みを兼ね備えているため、多くのシーンで柔軟に使われています。
Listクラスの基本的な使い方
Listクラスを使う際は、System.Collections.Generic名前空間に含まれているので、あらかじめインポートしておくと便利です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
Imports System.Collections.Generic Module Module1 Sub Main() ' 整数型のListを宣言 Dim numbers As New List(Of Integer) ' 要素の追加 numbers.Add(10) numbers.Add(20) ' 複数要素の追加 Dim moreNumbers As Integer() = {30, 40, 50} numbers.AddRange(moreNumbers) ' 要素の削除 numbers.Remove(20) ' 値が20の要素を削除 numbers.RemoveAt(0) ' 先頭の要素を削除 ' 要素の確認 If numbers.Contains(40) Then Console.WriteLine("40が含まれています。") End If ' 要素のアクセス If numbers.Count > 0 Then Dim firstValue As Integer = numbers(0) Console.WriteLine("先頭の要素は " & firstValue.ToString()) End If ' ソート numbers.Sort() ' 反復処理 For Each num As Integer In numbers Console.WriteLine(num) Next Console.ReadLine() End Sub End Module |
上記のコードでは、Addメソッドで要素を追加し、RemoveやRemoveAtで要素を削除しています。
Sortを使えば昇順にソートでき、Containsで特定の値が含まれるかどうか確認できます。
リストの中身を出力するときは、For Eachを使うと簡単にすべての要素を取得できます。
実行結果の例
上記コードを実行すると、出力は環境によって多少異なる場合がありますが、概ね以下のような表示となります。
40が含まれています。
先頭の要素は 30
30
40
50
Listクラスの具体例(独自クラスを格納する場合)
Listの型引数には、任意のオブジェクト型を指定できます。
たとえば、独自クラスをListに格納して管理することで、柔軟なデータ構造を構築できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
Imports System.Collections.Generic Public Class Person Public Property Name As String Public Property Age As Integer End Class Module Module2 Sub Main() ' PersonクラスのListを作成 Dim people As New List(Of Person) ' 要素の追加 people.Add(New Person With {.Name = "太郎", .Age = 30}) people.Add(New Person With {.Name = "花子", .Age = 25}) people.Add(New Person With {.Name = "次郎", .Age = 35}) ' 検索例: 年齢が30以上の人を取得 Dim olderPeople As List(Of Person) = people.FindAll(Function(p) p.Age >= 30) ' 結果の表示 For Each person As Person In olderPeople Console.WriteLine(person.Name & " さんは " & person.Age.ToString() & " 歳です。") Next Console.ReadLine() End Sub End Module |
上記では、FindAllメソッドを使用して条件に合致する要素のみを抽出し、新たなListとして取得しています。
このように、必要な要素を効率よく検索・絞り込みできる点もListクラスの大きな強みです。
注意点
Listクラスは便利ですが、いくつか留意するポイントがあります。
- インデックス範囲外アクセス:リストの要素数より大きなインデックスを指定すると例外が発生します。
- スレッドセーフ性:複数スレッドから同時に操作する場合、ロックや同期処理を検討する必要があります。
- 反復処理中の変更:For Each中にリストの要素を追加・削除するとエラーが発生する場合があるため注意が必要です。
- メモリとパフォーマンス:要素が増え続ける場合、容量の再割り当てが行われるため、状況に応じて初期容量を指定するといった最適化が考えられます。
まとめ
VB.NETのList(Of T)は、要素の追加や削除、検索、並べ替えなどが簡単に行える柔軟なコレクションです。
型を指定して使用するため、誤ったデータ型を格納するリスクを軽減でき、コードの可読性とメンテナンス性も向上します。
用途やパフォーマンス要求に応じて、List以外のコレクションと比較しながら使い分けると、より効率的な開発が行えます。