2010-03-30 5 views
8

Quindi una raccolta in VB6 tiene traccia di una chiave per ogni oggetto, e puoi cercare l'oggetto con la sua chiave.Cosa sono le raccolte implementate come in VB6?

Ciò significa che le raccolte vengono implementate come una sorta di hashtable sotto il cofano? Mi rendo conto che puoi avere più oggetti con la stessa chiave in una collezione, da qui l'ALCUN TIPO.

Qualcuno sa quale tipo di struttura dati deve rappresentare una raccolta VB6?

+5

È possibile ** non ** avere più elementi con la stessa chiave in una raccolta VB6. – raven

+0

Hai provato questo? Lo proverò domani ... Pensavo che aggiungere la stessa chiave non fosse un problema. –

+1

L'aggiunta di più elementi con il tasto NO è OK, ma i tasti sono maiuscole e minuscole (indipendentemente dalla dichiarazione di Option Compare). –

risposta

7

Per quanto ne so, la raccolta VBA è implementata come lista concatenata (utilizzata dagli indici Integer e For Each ... Next) e da una tabella hash (utilizzata dalle chiavi). E come ha detto Raven, non puoi avere più oggetti con la stessa chiave.

Modificato:

@MarkJ: avrei dato il mio citare per questo: Hardcore Visual Basic 2nd Ed. da Bruce McKinney, pubblicato da Microsoft Press 1997 ISBN 1-57231-422-2

Citazioni:

Pagina 191 - The Class Collection

"Per dirla semplicemente, la classe Collection è un souped- la versione C++ della classe CList [...]. Infatti, se si migliora la CList per essere una lista doppiamente collegata e gli si aggiungono alcune altre funzionalità (e magari si usa una tabella hash per cercare le chiavi stringa), si avere una classe di raccolta molto simile a quella fornita con Visual Basic. "

Pagina 197 - Prestazioni

"E, come un dato di fatto, mi è stato detto dagli sviluppatori Visual Basic che le collezioni sono doppiamente liste collegate (con funzionalità aggiuntive per sostenere l'indicizzazione)."

Ora, McKinney era più un giornalista che un programmatore e non uno sviluppatore. Tuttavia, ha lavorato per Microsoft e ha contatti nei team VB e VBA. La sua spiegazione funziona per me.

Per inciso, la ragione dell'elenco doppiamente collegato è di rendere efficiente l'inserimento di elementi sia all'inizio che alla fine della raccolta.

+0

Significa che ci sono sia una lista collegata sia una tabella hash esistente fianco a fianco, con riferimenti allo stesso oggetto? E a seconda di come lo si itera, vengono utilizzate le diverse strutture dati secondo necessità? –

+0

Mark sta descrivendo l'interfaccia del codice attraverso cui si accede a una raccolta. Possiamo solo dedurre che sotto il cofano deve essere qualcosa che supporta la funzionalità. Possiamo ipotizzare che possa utilizzare una lista collegata e una tabella hash ma non lo sappiamo. – MarkJ

+0

@MarkJ: Speravo che qualcuno fosse in grado di indicarmi una risorsa che chiarisse la speculazione sull'implementazione. –