Newsgroup: it.comp.lang.visual-basic
Titolo: Ridimensione degli array

Come posso ridimensionare un'array cosi composto 3 elementi
array(1) = xx1
array(2) = xx2
array(3) = xx3
ora devo eliminare solo il 2 come faccio ?
Claudio

Claudio
Per quello che ho capito io non mi sembra che si possa fare, almeno che tu
non decida di crearti un algoritmo che copia tutti i dati in un array
momentaneo e poi ridimensiona l'array originale e ricopia tutti i dati
tranne quello eliminato, ma sarebbe troppo macchinoso.....
Il consiglio vero invece è "Oggetto Collection" e non dico altro. ;)
Ciao Emiliano.
--
Posted from 
eqs.ifsi.rm.cnr.it
 [150.146.134.11] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ora devo eliminare solo il 2 come faccio ?
Poniamo che "Index" sia l'elemento da cancellare:
Dim i As Long
For i = Index + 1 To UBound(MyArray)
    MyArray(i - 1) = MyArray(i)
Next
ReDim Preserve MyArray(LBound(MyArray) To UBound(MyArray) - 1)
se il tuo array contiene variabili dello stesso tipo (se stringhe, devono essere
della stessa lunghezza) puoi usare anche questo metodo molto piu' efficiente:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
 (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Dim ItemLen As Long, ItemCount As Long
'stabiliamo l'occupazione in bytes del singolo elemento
'e il numero di elementi
ItemLen = Len(MyArray(Index))
ItemCount = UBound(MyArray) + 1
'shiftiamo a sinistra gli elementi dell'array;
'in questo modo quello con indice=Index viene sovrascritto.
CopyMemory ByVal VarPtr(MyArray(Index)), ByVal VarPtr(MyArray(Index + 1)), _
 (ItemCount - Index) * ItemLen
ReDim Preserve MyArray(LBound(MyArray) To UBound(MyArray) - 1)
In entrambi i casi ricordati di mettere i controlli per i casi particolari
(array di un solo elemento ecc..)
Ciao
--
Luca Dormio
luca....@tin.it
luca....@sig-la.com

 
questo funziona solo se l'array parte da zero:
supponi ubound = 3
3 + 1 = 4 elementi -> 
se parte da 0 OK! 0,1,2,3
se parte da 1 no! 1,2,3 -> solo 3 elementi!

GioF ha scritto nel messaggio ...




Basta un po' d'ingegno:
ItemCount = UBound(MyArray) - LBound(MyArray) + 1
Ciao

 "questo funziona solo se l'array parte da zero:" 
e non so aggiungere un 1? mi sottovaluti ampiamente.
Facevo solo per precisare, visto che a molti piace usare array che 
partono da 1. OK, hai ragione, potevo scrivere direttamente la soluzione, 
ma sembrava cosě banale...

ma sembrava cosě banale...
Scusa, ma di solito se una persona propone un problema senza dare la
soluzione (specie se cosě banale) significa che la sta chiedendo.
Comunque non voleva certo essere una critica personale nei tuoi confronti.
Ciao


[SNIP]
Hai ragione, infatti l'ultimo
ReDim Preserve MyArray(LBound(MyArray) To UBound(MyArray) - 1)
l'ho corretto al volo per "par conditio" verso chi preferisce gli array a base
1, visto che uso quasi sempre quelli a base 0; l'ItemCount la sopra mi era
sfuggito...


Si dice "par condicio"(retaggio di cinque anni di scientifico). Ciao.

 Si dice "par condicio"(retaggio di cinque anni di scientifico). Ciao.
Ehhhmmm...
allo scientifico, in Latino scritto, alternavo i 7 ai 3 solo in virtu' delle
traiettorie che assumevano i lanci di bigliettini... ;-)


 
ok, nessun problema :D