Newsgroup: it.comp.lang.visual-basic
Titolo: [?] swappare elementi di una collection

Salve a tutti,
ho un problema che non riesco a "capire" con una semplice routine che
dovrebbe swappare 2 elementi di una collection.
in partica mi serve che il 1° diventi = al 2° e il 2° uguale al 1°
speravo di poter applicare la "solita" procedura con la variable di
appoggio:
    set tmp=collection.item(1)
    set collection.item(1)=collection.item(2)
    set collection.item(2)=tmp
(ovviamente tmp è del tipo classe di collection).
Se faccio in questoi modo mi da errore:
    n°438-   Proprietà o metodo non supportati dall'oggetto
se provo ad usare variabili temporanee in questo modo:
    set c1=collection.item(1)
    set c2=collection.item(2)
    set tmp=c1
    set c1=c2
    set c2=tmp
    set collection.item(1)=c1
    set collection.item(2)=c2
non mi da errore ma lo "swapp" non avviene... cioè se vado a interrogare i 2
item della collection (per index) questi non si sino scambiati di posto.
E' possibile fare questo tipo di operazione? (Uso VB5)
Mi serve poter variare l'ordine degli elementi della collection e speravo di
poter usare l'index per chiamari in "ordine" e la ky per l'accesso
all'elemento.
Grazie
Davide

     set collection.item(2)=tmp
infatti, non si puň fare.. ainoi. Per rimediare copia tutta la collection in
un'array di oggetti.. cosě funge
Fabio

    set collection.item(2)=tmp
Ci sei quasi ;-)
Devi adoperare Add e Remove come nell' esempio che segue:
Option Explicit
Public Sub Main()
    Dim col As New Collection
    ' Class1 e' una class che ha una sola property Name As String
    Dim c As Class1, c2 As Class1
    Dim i As Long
 
    For i = 1 To 12
        Set c = New Class1
        c.Name = Format$(DateSerial(Year(Now), i, 1), "Mmmm")
        col.Add c
    Next i
    Set c = Nothing
 
    ' --- swappa il 4 col 6
 
    Set c = col(4)
    Set c2 = col(6)
    col.Remove 4
    col.Add c2, , 4
    col.Remove 6
    col.Add c, , 6
 
    For i = 1 To 12
        Set c = col(i)
        Debug.Print c.Name
    Next i
End Sub
-- 
hth, hal


Grazie :)
Ciao
Davide

 c.Name = Format$(DateSerial(Year(Now), i, 1), "Mmmm")
ahiahiahi ..e MonthName() che ci sta a fare?
Silv;o)

ahiahiahi ..e MonthName() che ci sta a fare?
Da vb6 in poi, mentre Davide usa vb5 ;-)
-- 
ciao, hal

     col.Add c2, , 4
perdona l'ignoranza ma come lo implementi ll metodo ADD della collection?
grazie
Davide

perdona l'ignoranza ma come lo implementi ll metodo ADD della collection?
Implementare?
Fa tutto da sola la collection.
Non ho capito la domanda :-(
-- 
ciao, hal

 Non ho capito la domanda :-(
perdonami :) colpa mia.. io uso un acolelction definita non "da codice" ma
con il classbuilder , non è l'oggetto collection "standard"
quindi volevo sapere se avevi idea di come implementare "after" e "before"
in una collection di "classbuilder"...
perchè nel metodo ADD della mia collectin non hoidea di come definire
l'index su cui scrivere....
grazie
davide

in una collection di "classbuilder"...
Non uso gli wizard :-(
Pero' se usi le chiavi invece degli indici e' ancora meglio
(altrimenti si perderebbe una buona fetta della convenienza ad
usare le Collection).
Ho bisogno di vedere il codice che scrivi, non
ho voglia di fare prove a vuoto con il class builder :-(
-- 
ciao, hal

 usare le Collection).
le chiavi già le uso ma ho bisogno di poter varaire l'ordine di 2 elementi
della collection in modo che se li scorro con for/each o cimunque in base
all'indice posso averela l'ordinamento della stessa.
Le chiavi le uso per accedere alle singoli classi.
Scusa la mia ignorazna ma senza usare il classbuilder, come fai a
personalizzare l'oggetto collection (aggiungere metodi. proprietà)? cioè il
classbuilder lo uso perchè mi crea il file cls su cui poi lavorare.. tu il
codice dove lo inserisci? fai una classe derivandola da collection?
Grazie
Davide

Questo è un metodo tuo di una classe, non di una collection. è probabile che
mCol sia la collection..
In effetti ha ragione Hal, anch'io ho toppato sullo stesso problema perché
circa una settimana fa dovevo fare un bubble sort su una collection e mi
dava lo stesso errore. Ho immaginato che non si potesse fare.. poi vedo che
sul metodo Add si può dire in quale posizione della collection inserire il
nuovo elemento.. come appunto hal ha suggerito. Però a occhio non vedo cosa
c'entra il class builder con il problema.. non stiamo parlando di classi ma
di collection (che magari le contengono, ma non è detto)
Fabio

 di collection (che magari le contengono, ma non è detto)
beh semplice.. uso il classbuilder per crearmi una collection
"personalizzata" cge poi è un classe che contiene una collection (mcol)
l'equivoco è nato da questo..
ora per risolvere il problema devo esporre nel mio metodo add gli stessi
input del metodo ADD della collection...
Ciao
Davide