今回は、VB.NETでRedimを使って配列の大きさを変更する方法についてご紹介します。
関連記事
Redimとは
VB.NETでは、配列のサイズは通常固定長ですが、ReDimステートメントを使うと配列のサイズを動的に変更できます。
このときPreserveをつけるかどうかで、既存データを保持するかどうかを選ぶことができます。
例として以下の2種類があります。
- ReDim :既存データを破棄し、新しいサイズの配列を作る
- ReDim Preserve :既存データを保持しつつ、配列サイズを変更する
基本的な使い方
まずは、ReDimによって配列のサイズを変更する方法を見てみましょう。
なお、ReDimにはPreserveなしとありの2種類が存在します。
ReDim(Preserveなし)の例
Preserveがない場合は既存データがすべて初期化されるため、データを保持する必要がないケースで使用します。
1 2 3 4 5 6 7 8 9 10 |
Dim arr() As Integer = {1, 2, 3} ' 元の要素数は3 ' 配列の要素数を6に変更(0~5のインデックス) ReDim arr(5) ' ここでarr内の値はすべて初期化(0)される Console.WriteLine("要素数:" & arr.Length) For i As Integer = 0 To arr.Length - 1 Console.WriteLine(arr(i)) Next |
実行結果
要素数:6
0
0
0
0
0
0
ReDim Preserveの例
Preserveを指定すると、既存の要素を保持したままサイズだけ拡張できます。
1 2 3 4 5 6 7 8 9 |
Dim arr() As Integer = {1, 2, 3} ' 元の要素数は3 ' 配列の要素数を6に拡張し、元の値を保持 ReDim Preserve arr(5) Console.WriteLine("要素数:" & arr.Length) For i As Integer = 0 To arr.Length - 1 Console.WriteLine(arr(i)) Next |
実行結果
要素数:6
1
2
3
0
0
0
実用的な具体例
ここでは、多次元配列や動的な拡張例を見てみます。
多次元配列でのサイズ変更
多次元配列でReDim Preserveを使う際は、最後の次元のみ変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
' 2行×2列の配列を宣言 Dim matrix(,) As Integer = {{1, 2}, {3, 4}} ' 最後の次元(列)を4列に拡張 ReDim Preserve matrix(1, 3) Console.WriteLine("行数:" & matrix.GetLength(0)) Console.WriteLine("列数:" & matrix.GetLength(1)) For i As Integer = 0 To matrix.GetLength(0) - 1 For j As Integer = 0 To matrix.GetLength(1) - 1 Console.Write(matrix(i, j) & " ") Next Console.WriteLine() Next |
実行結果
行数:2
列数:4
1 2 0 0
3 4 0 0
動的な拡張とデータ保持
配列に新たな要素を追加するたびにサイズを増やしたい場合は、ReDim Preserveを繰り返し使う方法があります。
1 2 3 4 5 6 7 8 9 10 11 |
Dim data() As String = {"初期データ"} ' 元の要素数は1 ' 新しい要素を追加 Dim newValue As String = "追加データ" ReDim Preserve data(data.Length) data(data.Length - 1) = newValue Console.WriteLine("要素数:" & data.Length) For i As Integer = 0 To data.Length - 1 Console.WriteLine(data(i)) Next |
実行結果
要素数:2
初期データ
追加データ
注意点
ReDimを使う際は、以下の点に注意するとよいでしょう。
- データの破棄:Preserveを付けないReDimを行うと既存のデータは失われます。
- 多次元配列の制限:複数次元の場合、最後の次元のみPreserveでサイズ変更可能です。
- パフォーマンス:頻繁にサイズ変更が必要な場合、List(Of T)などの使用を検討すると効率的です。
- 初期化:新しい要素は型ごとの既定値で初期化されるため、必要なら再代入が必要です。
まとめ
VB.NETではReDimによって配列のサイズを動的に変更できます。
ReDim Preserveを使えば既存データを保持したまま拡張できるため、用途に応じて使い分けが大切です。
多次元配列やパフォーマンスにも配慮し、より柔軟に配列操作を行いましょう。
関連記事