• 締切済み

VB.NETの配列について教えてください

内容を削除する際に、リストボックスで使う ListBox1.Items.RemoveAt(n) と同じことを配列で行いたいのですが、 可能であれば方法を教えて頂けないでしょうか。 よろしくお願い致します。

みんなの回答

  • loop_dog
  • ベストアンサー率32% (14/43)
回答No.3

自分でクラスを作って(myclass)、そのクラスを ArrayListに入れるとか。(ArrayList.add(myclass)) 削除する時には(ArrayList.Remove())でOK。 http://msdn2.microsoft.com/ja-jp/library/system.collections.arraylist_members(VS.80).aspx

popopompom
質問者

お礼

ご回答ありがとうございます。 使ったことがないので、まだよく分からないのですが、 これを使えればとても簡単に出来そうですね。 教えて頂いたmsdnで確認してみたいと思います。 ありがとうございました。

popopompom
質問者

補足

大変申し訳ありませんが、頂いたご回答に甲乙がつけられず、 ポイントなしで締め切らせて頂きたいと思います。 せっかくご回答頂いたのに申し訳ございません。

回答No.2

(1) 削除したい要素の次の要素から、一つ前の要素にコピー (2) 配列のサイズを変更 と言う感じだと思います。 Sub Test() Dim strArray As String() Dim i As Integer ReDim strArray(10) For i = 0 To 10 strArray(i) = i.ToString() Next i RemoveAt(strArray, 3) ... End Sub Sub RemoveAt(ByRef a As String(), ByVal intIndex As Integer) Dim i As Integer Dim intLength As Integer intLength = a.GetLength(0) For i = intIndex To intLength - 2 a(i) = a(i + 1) Next i ReDim Preserve a(intLength - 2) End Sub End 要素数 < 2 の場合などは考慮していませんので、そのへんは改良して使ってください。 ちなみに、.NET 2.0 からは Array.Resize というのが使用できるそうです。 http://www.atmarkit.co.jp/fdotnet/dotnettips/444arrayresize/arrayresize.html

popopompom
質問者

お礼

すみません。先ほどのメッセージですが、 お礼に書くべきところ、間違えて補足になってしまいました。 申し訳ございません。

popopompom
質問者

補足

詳しいご回答をありがとうございます。 参考にさせていただきたいと思います。 NET2.0は色々便利な機能がありますね。 自分の環境では使えないので残念な思いをすることが良くあります。 ありがとうございました。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

アイテムの追加と異なり配列引数を使った削除は用意されていません RemoveAtでインデックスの大きい順に削除するしかないと思いますよ もともとの削除インデックス情報がIntger型の配列arIndexにあるとして 逆順ソート用のクラスを定義 public class myReverser   Implements IComparer   Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare     Return New CaseInsensitiveComparer().Compare(y, x)   End Function End Class 削除用イベントで   Array.Sort( arIndex, New myReverser() )   for each m as Integer in arIndex     ListBox1.Items.RemoveAt( m )   next といった具合でしょう... または SortとReverseを使って逆順にしてRemoveAtを実行でしょうね

popopompom
質問者

お礼

詳しいご回答をありがとうございます。 参考にさせて頂きたいと思います。 ありがとうございました。

popopompom
質問者

補足

redfox63様 tsukasa-12r様 大変申し訳ありませんが、頂いたご回答に甲乙がつけられず、 ポイントなしで締め切らせて頂きたいと思います。 せっかくご回答頂いたのに申し訳ございません。

関連するQ&A