2010-03-30 7 views
8

Tak więc kolekcja w VB6 śledzi klucz dla każdego obiektu i można wyszukać obiekt za pomocą jego klucza.Jakie są wdrożenia zbiorów w wersji VB6?

Czy to oznacza, że ​​kolekcje są zaimplementowane jako coś w rodzaju hashtable pod maską? Rozumiem, że możesz mieć wiele przedmiotów z tym samym kluczem w kolekcji, stąd SOME SORT.

Ktoś wie, jakiej struktury danych typu powinna reprezentować kolekcja VB6?

+5

Możesz ** nie ** mieć wielu przedmiotów z tym samym kluczem w kolekcji VB6. – raven

+0

Testowałeś to? Przetestuję to jutro ... Myślałem, że dodanie tego samego klucza nie stanowi problemu. –

+1

Dodanie wielu elementów za pomocą klawisza NIE jest OK, ale klawisze są niewrażliwe na wielkość liter (niezależnie od deklaracji porównania opcji). –

Odpowiedz

7

O ile mi wiadomo, kolekcja VBA jest zaimplementowana jako lista powiązana (używana przez indeksy Integer i For Each ... Next) i tablica skrótów (używana przez klucze). A jak powiedział Raven, nie można mieć wielu przedmiotów z tym samym kluczem.

Zmieniano:

@MarkJ: Należy Dałem przytoczyć w tym: Hardcore Visual Basic 2nd ed. Bruce McKinney, opublikowanym przez Microsoft Press ISBN 1-57231-422-2 1997

Cytaty:

Page 191 - The Collection Klasa

„Mówiąc prościej, klasa Collection to souped- w górę C + + klasy CList [...] W rzeczywistości, jeśli poprawisz CList, aby był podwójnie połączoną listą i dodasz jej kilka dodatkowych funkcji (i może użyjesz tablicy hash do wyszukiwania kluczy strunowych), mieć klasę kolekcji podobną do tej dostarczonej z Visual Basic. "

Page 197 - Wyniki

„I, jak w rzeczywistości, że pacjent został poinformowany przez programistów Visual Basic, że kolekcje są podwójnie powiązanych list (z dodatkowymi funkcjami do obsługi indeksowania).”

Teraz McKinney był bardziej dziennikarzem niż programistą, a nie programistą. Jednak pracował dla Microsoft i miał kontakty w zespołach VB i VBA. Jego wyjaśnienie działa dla mnie.

Nawiasem mówiąc, powodem podwójnie powiązanej listy jest sprawienie, aby było skuteczne wstawianie przedmiotów zarówno na początku, jak i na końcu kolekcji.

+0

Czy to oznacza, że ​​istnieje zarówno połączona lista, jak i tablica powiązania istniejąca obok siebie, przechowująca odniesienia do tych samych obiektów przedmiotów? W zależności od sposobu iteracji go, używa różnych struktur danych w razie potrzeby? –

+0

Mark opisuje interfejs kodu, przez który uzyskujesz dostęp do kolekcji. Możemy tylko wywnioskować, że pod maską musi być coś, co wspiera funkcjonalność. Możemy spekulować, że może użyć połączonej listy i tablicy mieszającej, ale tego nie wiemy. – MarkJ

+0

@MarkJ: Miałem nadzieję, że ktoś będzie mógł wskazać mi źródło, które rozwiąże spekulacje na temat implementacji. –