Eliminar un elemento en un Array

Iniciado por edgar_allan, 15 Enero 2009, 14:08 PM

0 Miembros y 1 Visitante están viendo este tema.

edgar_allan

Hola, Buen Año a todos!!!

tengo una pregunta con respecto a Visual Basic.

estoy tratando de eliminar un elemento de un array ejem:

Dim arrdat(4)
arrdat(0) = "carlos"
arrdat(1) = "fernando"
arrdat(2) = "laura"
arrdat(3) = "manuel"
arrdat(4) = "marina"

para luego eleminar el elemento del array arrdat(1) pero que ahora el array quede con un elemento menos y no del mismo tamaño como era originalmente. entonces quedaría asi:

Dim arrdat(3)
arrdat(0) = "carlos"
arrdat(1) = "laura"
arrdat(2) = "manuel"
arrdat(3) = "marina"

tiene alguna idea de como hacero?

gulabyte

#1
haz un bucle que te mire los objetos del array uno a uno y si coincide con el nombre que quieres borar que sobreescriba en ese espacio el siguiente nombre y asi consecutivamente....algo como...

Dim i, j as integer 'Contadores
Dim Nombre As String

For i = 1 To "cantidad de objetos en el array"
    if array(i) = Nombre Then
        for j = 1 to "objetos array - i"
            If not (i+1) > cantidad de objetos en el array then array(i) = array(i+1) else: array(i) = ""
        next j
    end if
next i


asi lo que harías sería encontrar el nombre, y sobreescribir el hueco de ese nombre con el que esta en el siguiente hueco, uno a uno hasta llegar al final... claro que al hacer eso te quedará el último hueco vacío....

espero que te sirva ;D

Mofificado.
PD: Lo de [If not (i+1) > cantidad de objetos en el array] es para que no te de error porque sino al llegar al último sería array(4) = array(5) cuando array(5) no existe.... además si el nombre se repite en la lista te los va borrar todos, ya que después de salir del bucle de "j" sigue el de "i"....para evitarlo podrias poner "exit sub" después del next j.... intenta comprender el código y modifícalo a tu gusto ;D

‭‭‭‭jackl007

te doy la idea, y tu lo codeas, es facil...
en principio hay una funcion para cambiarle el numero de elementos del array, recuerdo que hace unos años lo intente y no funciono...
bueno; pero lo que puedes hacer es: como conoces la posicion que quieres eliminar; pues, empiezas a copiar de una posicion adelante de donde vas a empezar a cortar... y con una bifurcacion (if-then), puedes controlar que no haga nada cuando llege a la posicion final, y en ella sobreescriba con "" (cadena vacia..)
de ese modo podrias "correr" los elemntos conociendo la posicion desde donde quieres cortar... claro que no estamos alterando en nada el numero de elementos del array, solo le colocamos al ultimo una cadena vacia...

seba123neo

es mas que facil...son 4 lineas de codigo...
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

LeandroA

hola te pongo un ejemplo, tenes que redimencionar el array , vos encargate de entenderlo


Option Explicit
Dim MyArray() As String

Private Sub Command1_Click()
If DeleteItem(5) Then
    ImprimirArray
    MsgBox "El Array tiene " & UBound(MyArray) & " Items"
Else
    MsgBox "El indice esta fuera del intervalo"
End If
End Sub

Private Sub Form_Load()
    Dim i As Long
   
    ReDim MyArray(0)
   
    For i = 0 To 9
        AddItem "Item" & i
    Next
   
    ImprimirArray
   
    MsgBox "El Array tiene " & UBound(MyArray) & " Items"
End Sub


Private Sub AddItem(Text As String)
    Dim Count As Long
    Count = UBound(MyArray)
    MyArray(Count) = Text
    ReDim Preserve MyArray(Count + 1)
End Sub

Private Function DeleteItem(ByVal Index As Long) As Boolean

    Dim i As Long
    Dim Count As Long
    Count = UBound(MyArray)
    If Index <= Count And Index >= LBound(MyArray) Then
        For i = Index To Count - 1
            MyArray(i) = MyArray(i + 1)
        Next
        ReDim Preserve MyArray(Count - 1)
        DeleteItem = True
    End If
End Function

Private Sub ImprimirArray()
    Dim i As Long
    Dim Count As Long
    Count = UBound(MyArray)
    For i = 0 To Count
        Debug.Print MyArray(i)
    Next
End Sub


Saludos