Grazie e scusate il disturbo
--
Posted via Mailgate.ORG Server - http://www.Mailgate.ORG
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
questo però vale solo per array con elementi statici
no array di string o di oggetti...
ciao
Ciao e ancora grazie!
> questo perň vale solo per array con elementi statici
> 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
>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.
Uhm, della serie "speriamo che nella prossima release di vb gli array
e le stringhe funzionino allo stesso modo" ;-)
--
ciao, hal
> Zanna ha scritto:
> Uhm, della serie "speriamo che nella prossima release di vb gli array
> 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
>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?
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
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