2007年3月16日金曜日

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

配列の最後の要素の消すのはなんてことはないのですが、
中盤の要素を削除するのって結構メンドクサイですね。
  1.    
  2. Private Sub ArrayRemove(ByRef TargetArray As String(), ByVal deleteIndex As Integer)  
  3.   
  4.  '一時保管用配列  
  5.  Dim newArray As String()  
  6.  ReDim newArray(TargetArray.GetUpperBound(0) - 1)  
  7.   
  8.  '一時保管用配列にすべてをコピーする  
  9.  Array.Copy(TargetArray, 0, newArray, 0, deleteIndex)  
  10.   
  11.  '一時保管用配列に削除対象の要素以降の値をコピーする  
  12.  Array.Copy(TargetArray, deleteIndex + 1, newArray, deleteIndex, TargetArray.GetUpperBound(0) - deleteIndex)  
  13.   
  14.  'オリジナルの配列の格納領域を再割り当て  
  15.  ReDim TargetArray(newArray.GetUpperBound(0))  
  16.   
  17.  '値を代入  
  18.  TargetArray = newArray  
  19.   
  20. 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