VB.NETの配列のReDimについて
配列の領域を拡張する方法として「Redim」命令が在ります。 この命令に「Preserve」を付けて宣言すると、既に存在していた要素の内容が引き継がれて配列が拡張されます。
ReDim Preserve 配列名(指標上限値)
このReDimの動作なのですが、以下のソースを見てください。
これを実行させると以下の様な表示になります。
==============
ArrX(0) = 10
ArrX(1) = 20
Arr(0) = 1
Arr(1) = 2
Arr(2) = 3
==============
4行目で配列変数「ArrX」には「Arr」がコピーされますが、 「ReDim」命令後、配列変数「ArrX」を通して要素を10倍し、 「ArrX」と「Arr」の要素の値を全て表示させると全く別物であることがわかります。
最初の「Arr」の宣言で確保された配列の領域と、 ReDim命令で確保された配列の領域が異なるものであることがわかります。
つまりReDim命令は、指定された配列の領域を拡張する場合、 新たに別の領域に指定された大きさで配列を生成した後で、 拡張前の配列から要素の値をコピーする様です。
ReDim命令をどんどん繰り返して使用するとメモリ領域に使わない配列が増えていきます。 更に、拡張時に毎回メモリ確保の処理と、拡張前配列からのデータのコピーが セットで行われるので、処理時間も掛かります。
以下の様なことを行うと、処理時間が数秒かかってしまいます。 Integer型の配列なので数秒ですが、構造体などの領域の大きいものの配列ならば もっと時間が掛かります。
「ReDim」を使う時は気をつけたいものです。
そこで、配列の替わりに使えるものとして、「ArrayList」があります。 以下に「ArrayList」の例がありますが、使い方は配列と変わらない感じです。 ただ、要素を増やす場合は「ArrayList」の「Add」メソッドを使って行います。
■関連記事
⇒VB.NETの関数の参照型データの引数での値渡しと参照渡しの違いについて
⇒VB.NETの関数の戻り値が参照型について
⇒VB.NETの配列は参照型
⇒VB.NETの値型と参照型について
⇒VB.NETの文字列型(String)について
コメント