今回は、VB.NETで配列に要素を追加する方法についてご紹介します。
VB.NETの配列は、宣言時にサイズを固定する仕組みです。
そのため、後から新たな要素を追加しようとしても、直接的にサイズを変更することはできません。
しかし、ReDim PreserveやArray.Resizeといった構文、あるいはList(Of T)の活用など、複数の方法を使うことで配列に要素を拡張できます。
ここでは、代表的な手法と具体的なサンプルコードについて解説します。
配列に要素を追加する基本概念
VB.NETの配列はサイズが固定であるため、新しい要素を「追加」するというより「サイズを拡張」して再度作り直すイメージになります。
以下のような方法が存在します。
- ReDim Preserve:既存の要素を維持したまま配列のサイズを再定義する
- Array.Resize:.NET Frameworkに用意されているメソッドを利用して配列サイズを変更する
- List(Of T):動的にサイズが変動するコレクションを利用する
- 新しい配列を作成し、コピー:自力で配列を用意し、要素をコピーして拡張する
これらのアプローチを使い分けることで、効率的かつ可読性の高い配列操作が可能になります。
配列を拡張する方法 (1) ReDim Preserve
ReDim Preserveを使うと、既存の配列の中身を保持したままサイズを変更できます。
ただし、拡張可能なのは最終次元のみなので、多次元配列のサイズ変更には制限があります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Dim numbers() As Integer = {1, 2, 3} ' 初期配列 ' 配列サイズを1増やし、要素を保持したまま再定義 ReDim Preserve numbers(numbers.Length) ' 新しく作られた最後の要素に値を代入 numbers(numbers.Length - 1) = 4 ' 配列の内容を表示 For Each num In numbers Console.WriteLine(num) ' 1, 2, 3, 4 が出力される Next |
1
2
3
4
ReDim Preserveはシンプルですが、要素のサイズを変更するたびに内部で新しい配列を生成し、内容をコピーしています。
大規模な配列や頻繁な追加がある場合は、パフォーマンスに注意が必要です。
配列を拡張する方法 (2) Array.Resize
Array.Resizeを使うと、.NET Frameworkの標準機能として同様の処理が行えます。
処理内容は実質的にReDim Preserveと同様ですが、コードが分かりやすくなる利点があります。
1 2 3 4 5 6 7 8 9 10 11 12 |
Dim numbers() As Integer = {1, 2, 3} ' 配列のサイズを1増やす Array.Resize(numbers, numbers.Length + 1) ' 新しい要素を設定 numbers(numbers.Length - 1) = 4 ' 配列の内容を表示 For Each num In numbers Console.WriteLine(num) ' 1, 2, 3, 4 が出力される Next |
1
2
3
4
このメソッドも内部で新たな配列を生成してコピーしているため、サイズ変更のコストには注意が必要です。
配列を拡張する方法 (3) List(Of T) を利用する
頻繁に要素を追加・削除する場合は、List(Of T)を使うことでパフォーマンスと可読性を向上できます。
List(Of T)は動的な配列のようなものなので、Addメソッドで簡単に要素を追加できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
' リストを初期化 Dim numberList As New List(Of Integer)(New Integer() {1, 2, 3}) ' リストに要素を追加 numberList.Add(4) ' 必要に応じて配列に戻す Dim numbers() As Integer = numberList.ToArray() ' 配列の内容を表示 For Each num In numbers Console.WriteLine(num) ' 1, 2, 3, 4 が出力される Next |
1
2
3
4
List(Of T)は内部で配列を管理しているため、要素が増えると自動的に拡張されます。
加えて、コードの見通しもよいため、多くの場合は配列よりList(Of T)の活用がおすすめです。
配列を拡張する方法 (4) 新しい配列を作成してコピー
手作業で新しい配列を作り、Array.Copyなどを利用して要素をコピーする方法です。
元の配列を上書きする柔軟な処理が可能ですが、コード量が増えるのがデメリットです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Dim numbers() As Integer = {1, 2, 3} ' 元の配列より大きい配列を新規に作成 Dim newNumbers(numbers.Length) As Integer ' 既存の要素をコピー Array.Copy(numbers, newNumbers, numbers.Length) ' 新しく作成した配列の最後に値を追加 newNumbers(newNumbers.Length - 1) = 4 ' 必要に応じて元の変数に再代入 numbers = newNumbers ' 配列の内容を表示 For Each num In numbers Console.WriteLine(num) ' 1, 2, 3, 4 が出力される Next |
1
2
3
4
独自のロジックを組み込みたい場合に有用ですが、基本的にはReDim PreserveやArray.Resize、またはList(Of T)のほうが手軽です。
まとめ
VB.NETの配列はサイズが固定ですが、様々な手段で要素を拡張できます。
性能や可読性を考慮して、目的に合った方法を選択することが大切です。
動的な処理が必要な場合には、List(Of T)の活用を積極的に検討すると便利です。