Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Come cancellare 1 elemento da un array?

1,359 views
Skip to first unread message

Claudio De Astis

unread,
Feb 14, 2002, 10:55:13 AM2/14/02
to
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

Zanna

unread,
Feb 14, 2002, 2:43:53 PM2/14/02
to
"Claudio De Astis" <de...@libero.it> ha scritto nel messaggio
news:26943e3299c5b72ac1...@mygate.mailgate.org...

> 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?

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

Tino

unread,
Feb 14, 2002, 7:11:10 PM2/14/02
to
> - 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).

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

ciao


Claudio De Astis

unread,
Feb 15, 2002, 3:16:35 AM2/15/02
to
Grazie 1000 a entrambi adesso proverň.

Ciao e ancora grazie!

Zanna

unread,
Feb 15, 2002, 5:12:12 AM2/15/02
to
"Tino" <Ti...@tino-online.it> ha scritto nel messaggio news:ymYa8.21559

> 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


hal1961

unread,
Feb 15, 2002, 5:23:38 AM2/15/02
to
Zanna ha scritto:

>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

unread,
Feb 15, 2002, 7:06:48 AM2/15/02
to
"hal1961" <aldoc...@inwind.it> ha scritto nel messaggio news:a4inja$ti8

> 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


Negus

unread,
Feb 15, 2002, 7:28:56 AM2/15/02
to
On Thu, 14 Feb 2002 15:55:13 +0000 (UTC), "Claudio De Astis"
<de...@libero.it> wrote:

>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


Tino

unread,
Feb 15, 2002, 11:09:45 AM2/15/02
to
> 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.
>

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


leonello

unread,
Feb 15, 2002, 6:04:33 PM2/15/02
to

"Claudio De Astis" <de...@libero.it> ha scritto nel messaggio
news:26943e3299c5b72ac1...@mygate.mailgate.org...

> 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

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

0 new messages