2007年3月16日金曜日

[VB.NET] 配列の指定要素のみを削除する

配列の最後の要素の消すのはなんてことはないのですが、
中盤の要素を削除するのって結構メンドクサイですね。
 
Private Sub ArrayRemove(ByRef TargetArray As String(), ByVal deleteIndex As Integer)

 '一時保管用配列
 Dim newArray As String()
 ReDim newArray(TargetArray.GetUpperBound(0) - 1)

 '一時保管用配列にすべてをコピーする
 Array.Copy(TargetArray, 0, newArray, 0, deleteIndex)

 '一時保管用配列に削除対象の要素以降の値をコピーする
 Array.Copy(TargetArray, deleteIndex + 1, newArray, deleteIndex, TargetArray.GetUpperBound(0) - deleteIndex)

 'オリジナルの配列の格納領域を再割り当て
 ReDim TargetArray(newArray.GetUpperBound(0))

 '値を代入
 TargetArray = newArray

End Sub

1 件のコメント:

匿名 さんのコメント...

参考になりました。
ありがとうございました。

一時配列を用意しなくても自身の配列で完結するのでは?と思い試してみたところ、上手く行きました。
↓こんな感じです。(ご参考までに)

Private Sub ArrayRemove(ByRef TargetArray As String(), ByVal deleteIndex As Integer)
'削除する要素+1~の内容 → 削除する要素~にコピー
Array.Copy(TargetArray, deleteIndex + 1, TargetArray, deleteIndex, TargetArray.Length - deleteIndex - 1)
'最終行を削除する
ReDim Preserve TargetArray(TargetArray.Length - 2)
End Sub