- 締切済み
VB.NETの配列について教えてください
内容を削除する際に、リストボックスで使う ListBox1.Items.RemoveAt(n) と同じことを配列で行いたいのですが、 可能であれば方法を教えて頂けないでしょうか。 よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- loop_dog
- ベストアンサー率32% (14/43)
自分でクラスを作って(myclass)、そのクラスを ArrayListに入れるとか。(ArrayList.add(myclass)) 削除する時には(ArrayList.Remove())でOK。 http://msdn2.microsoft.com/ja-jp/library/system.collections.arraylist_members(VS.80).aspx
- tsukasa-12r
- ベストアンサー率65% (358/549)
(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
お礼
すみません。先ほどのメッセージですが、 お礼に書くべきところ、間違えて補足になってしまいました。 申し訳ございません。
補足
詳しいご回答をありがとうございます。 参考にさせていただきたいと思います。 NET2.0は色々便利な機能がありますね。 自分の環境では使えないので残念な思いをすることが良くあります。 ありがとうございました。
- redfox63
- ベストアンサー率71% (1325/1856)
アイテムの追加と異なり配列引数を使った削除は用意されていません 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を実行でしょうね
お礼
詳しいご回答をありがとうございます。 参考にさせて頂きたいと思います。 ありがとうございました。
補足
redfox63様 tsukasa-12r様 大変申し訳ありませんが、頂いたご回答に甲乙がつけられず、 ポイントなしで締め切らせて頂きたいと思います。 せっかくご回答頂いたのに申し訳ございません。
お礼
ご回答ありがとうございます。 使ったことがないので、まだよく分からないのですが、 これを使えればとても簡単に出来そうですね。 教えて頂いたmsdnで確認してみたいと思います。 ありがとうございました。
補足
大変申し訳ありませんが、頂いたご回答に甲乙がつけられず、 ポイントなしで締め切らせて頂きたいと思います。 せっかくご回答頂いたのに申し訳ございません。