Newsgroup: it.comp.lang.visual-basic
Titolo: Come cancellare 1 elemento da un array?

Salve a tutti,ho 1 paio di domande:
Se creo un array dinamico utilizzando "preserve" come faccio ad
eliminare un'elemento al suo interno?
In caso non fosse possibile sapreste dirmi se esistono le liste in VB6?
Grazie e scusate il disturbo
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 In caso non fosse possibile sapreste dirmi se esistono le liste in VB6?
Tu intendi eliminare e quindi far scalare tutti gli elementi successivi,
giusto? :)
Hai due modi:
Modo semplice:
- Prendi l'ultimo elemento dell'array e lo copi sovrascrivendo quello da
eliminare.
- Con Redim Preserve accorci l'array di uno.
- Vantaggi: è semplice e veloce.
- Svantaggi: alla fine l'array è disordinato.
Modo un po' più complesso:
- Con CopyMemory() sposti tutti gli elementi da Index + 1 in poi in su di
uno in un colpo solo (specificando Len(elemento) * n_elem_da spostare come
parametro).
- Con Redim Preserve accorci l'array di uno.
- Vantaggi: L'array rimane ordinato
- Svantaggi: Non ricordo mai se si deve usare il ByVal nella CopyMemory() :)
             Se l'array è di notevoli dimensioni potrebbe essere
sensibilmente più lento.
Ciao

 parametro).
questo però vale solo per array con elementi statici
no array di string o di oggetti...
ciao

Grazie 1000 a entrambi adesso proverň.
Ciao e ancora grazie!


 no array di string o di oggetti...
Perchč?
Se č un array di stringhe l'array contiene il puntatore (quindi il numero di
byte da spostare sono (4 * n_elementi), ma dovrebbe funzionare comunque.
Lo stesso per oggetti o type.
Ciao

Lo stesso per oggetti o type.
Uhm, della serie "speriamo che nella prossima release di vb gli array
e le stringhe funzionino allo stesso modo" ;-)
-- 
ciao, hal

 e le stringhe funzionino allo stesso modo" ;-)
Da quanto ho sentito 
VB.NET
 usa una classe Array, quindi sicuramente non
funzionerà.
In VBx invecie sì.
Ciao

In caso non fosse possibile sapreste dirmi se esistono le liste in VB6?
Puoi utilizzare le collection.
In questo modo.
Dim dati as collection
Dim Item as variant
set dati=new collection
'Aggiunge tre stringhe alla collezione
call dati.add("prorva1")
call dati.add("prova2")
call dati.add("prova3")
'Cancella la seconda stringa e reindicizza automaticamente il terzo
'elemento a secondo elemento
call dati.remove(2)
'Naviga in tutta la collezione
for each item in dati 
	call msgbox(item)
next


Se pensi  come lavorano altri linguaggi (tipo c++) non č detto sia un
puntatore,e con un len non puoi vedere quanti byte occupa un oggetto.
Perň io non ho provato questa cosa su vb e se tu invece lo hai fatto
sicuramente ne saprai piů di me.Parlavo per esperienza su queste cose con
altri linguaggi e con vb non ho la certezza che usi solo puntatori.
ciao

 Grazie e scusate il disturbo
secondo me il modo pui semplice per scalare di 1 un arrai e' quello di
caricare nell'elemento da scartere un valore assurdo  e poi nella gestione
dell'array testare i valori e se e0 quello assurdo prendere le opportine
decisioni
esempio
dim a(1 to 10000) as long
 dim b() as long
dim k,i,n, integer
di desidera scartare ad esempio il 243iesimo valore
a(243) = -1.e30
n =    qualunque formula
a(n) = -1.e30
'ecc eccetera....
i = 0
 for k = 1 to 1000
     if a(k) = -1.e30  then
         i = i+1
          b(i) = a(k)
       end if
    next k
che ne penate ?
leonello