Condividi:        

oggetto dictionary

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

oggetto dictionary

Postdi patel » 19/08/12 08:09

Buon giorno a tutti
non ho mai utilizzato questo oggetto, potreste spiegarmi quando conviene usarlo e magari allegare qualche esempio ? non son riuscito a trovare spiegazioni esaurienti in rete mentre invece ne ho trovate sulle collection.
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Sponsor
 

Re: oggetto dictionary

Postdi PcBase » 19/08/12 08:25

Windows xp + Office 2003 Ita
Windows8 Office 2013
PcBase
Utente Senior
 
Post: 143
Iscritto il: 24/02/11 23:26

Re: oggetto dictionary

Postdi patel » 19/08/12 19:20

grazie dei link, mi piacerebbe però avere anche consigli da chi li usa per capire quando e come.
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: oggetto dictionary

Postdi Anthony47 » 20/08/12 21:23

Il Dictionary e' una struttura di dati abbastanza semplice, dove ogni membro e' costituito dalla coppia Chiave e Dato; si puo' facilmente aggiungere una Chiave/Dato, verificare se una Chiave esiste, eliminare una Chiave/Dato, variare una Chiave, leggere un Dato associato a una Chiave, o variarlo. L' accesso ai dati avviene tramite la Chiave; peculiarita' sono la possibilita' di verificare se una chiave esiste (metodo Exists) e l' azzeramento del contenuto (metodo RemoveAll)

La Collection e' una struttura di dati abbastanza simile, dove ogni membro e' caratterizzato dal suo valore, la sua posizione e opzionalmente la sua Chiave di accesso. Si puo' facilmente aggiungere un membro (opzionalmente precisando la sua posizione relativa) e la sua chiave, leggerlo o cancellarlo. In queste due ultime operazioni per specificare il membro si puo' usare la Chiave o la posizione, oppure si puo' usare una reiterazione del tipo For Each /Next; peculiarita' della Collection e' la possibilita' di specificare la Posizione di inserimento del membro, anche se limitato a "Prima di" oppure "Dopo di".

Il Dictionary e' un oggetto esterno al VBA, quindi portabile direttamente in programmi sviluppati ad esempio in VB; la Collection e' una struttura presente nel VBA e non nel VB, quindi un eventuale porting comporta l' adattamento alle strutture disponibili in VB.
Rispetto ad una matrice convenzionale, ambedue le strutture hanno il vantaggio dell' accesso con Chiave, e i membri possono essere di tipo diversi; la matrice consente di dichiarare la posizione assoluta di un dato.

Quando ricorrere a queste strutture dati? Quando le loro prestazioni semplificano la realizzazione di una soluzione. So che la risposta e' come minimo vaga, ma e' come chiedere a un pasticciere quando si usa la cannella e quando la vaniglia...

E' opinione comune che l' uso del Dictionary vs la Collection possa risultare in un codice piu' veloce; la mia esperienza (modesta, in verita') e' contrastante, vedi ad esempio viewtopic.php?f=26&t=96141&start=20#p551604
In quel caso pensavo che sarebbe stato penalizzante, per l' oggetto Collection, la mancanza del metodo "Exists" (che consente di sapere subito se una voce esiste nel Dictionary, mentre nella Collection ha richiesto una sequenza di istruzioni del tipo Err.Clear /On Error Resume Next /. . . /On Error GoTo 0 /If errNum = 5 Then) ma usando Dictionary il tempo macro era di 40 sec, usando Collection bastavano 15 sec.
Per ribadire che solo con la sperimentazione si trova, caso per caso, la soluzione piu' idonea; e aggiungo: solo con la sperimentazione si ha la possibilita' di imparare cose nuove.

Ciao a tutti.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: oggetto dictionary

Postdi patel » 21/08/12 05:56

Anthony47
ti ringrazio molto, sei stato molto esauriente ed hai confermato che dopo tutto la mia domanda era legittima.
Se non serve conoscere la posizione chiave e dato si inseriscono uguali ?
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: oggetto dictionary

Postdi patel » 21/08/12 06:25

mi spiego meglio, se si vuole ottenere una lista senza doppioni, chiave e dato sono uguali ?
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03

Re: oggetto dictionary

Postdi Anthony47 » 21/08/12 17:27

Se vuoi creare una lista di valori unici usando un Dictionary, allora si sfruttera' il metodo Exists per controllare se la chiave e' gia' presente, e il valore associato alla chiave e' ininfluente; d' altra parte un vaolre bisogna assegnarlo, quindi in genere si mette come la chiave.
Come spunto potresti provare questa macro:
Codice: Seleziona tutto
Sub unici()
Dim aArr As Variant, bbb As Boolean
Dim d As Object     'Late Binding method
Set d = CreateObject("Scripting.Dictionary")  'Se  Late Binding method
aArr = Range("A1").Resize(Cells(Rows.Count, 1).End(xlUp).Row).Value
[L1] = Timer
For I = LBound(aArr, 1) To UBound(aArr, 1)
'bbb = d.Exists(Cells(I, 1).Value)
If Not d.Exists(aArr(I, 1)) Then
    d.Add aArr(I, 1), aArr(I, 1)     'Chiave /Valore
End If
Next I
'   
[L2] = Timer
aArr = d.Keys    'esiste anche d.Items, da come ho compilato d Keys e Items sono uguali
Range("K1:K" & d.Count) = Application.WorksheetFunction.Transpose(aArr) 'Nota1
[L3] = Timer
'
End Sub

Crea in col. K l' elenco degli unici di col. A; L1-L2 ed L3 sono usati come timer per misurare i tempi di esecuzione. Per velocizzare l' I/O copio il contenuto di col A in una matrice ospitata nella variant aArr prima di sottoporre l' elenco all' algoritmo di "verifica se esiste già".
Nota1: Se l' elenco di chiavi e' superiore a 65536 allora non sara' possibile scaricare con una unica istruzione il contenuto di aArr (che in quella fase contiene tutte le chiavi presenti; vedi uso del metodo Keys), ma sara' necessario ricorrere a un loop (come avevo fatto nel caso che ti ho linkato ieri).

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: oggetto dictionary

Postdi patel » 21/08/12 18:58

ottimo e abbondante, grazie
patel
Utente Senior
 
Post: 309
Iscritto il: 24/04/12 16:03


Torna a Applicazioni Office Windows


Topic correlati a "oggetto dictionary":


Chi c’è in linea

Visitano il forum: Nessuno e 49 ospiti