2013-02-01 13 views
5

Rozważ zbiór w pamięci tysięcy obiektów NSString.Efektywne wyszukiwanie NSString w zestawie

Jaki jest najskuteczniejszy sposób wyszukiwania określonego NSString w zestawie? Czy wystarczy użyć numeru NSDictionary? Czy też jest zagwarantowane, że wyszukiwanie NSSet jest O (1) (nie można znaleźć żadnej dokumentacji, która tak mówi)?

Czy ta sama strategia miałaby zastosowanie do obiektów NSData?

+1

Co dokładnie chcesz zrobić? Jeśli chcesz tylko określić, czy łańcuch (lub dane) jest w zestawie, właśnie do tego służy 'NSSet'. Jeśli chcesz pobrać inny obiekt powiązany z łańcuchem (lub danymi), użyj 'NSDictionary'. Są to różne struktury danych dla różnych potrzeb. –

+0

Czy szybkie wyliczenie jest fajną opcją? – Exploring

+0

@KurtRevis Chciałbym tylko wiedzieć, czy element należy do zestawu. Nie mogłem jednak znaleźć żadnego potwierdzenia, że ​​w każdym przypadku kolejność wyszukiwania NSSet wynosi O (1). – hpique

Odpowiedz

4

This page pokazuje następujące notatka o zestawach:

Uwaga: W przypadku obiektów w zestawie mają dobrą funkcji skrótu, dostęp do elementu, ustawienie elementu i usunięcie elementu wszystko podjąć stałą czasu. Przy słabej funkcji skrótu (takiej, która powoduje częste kolizje haszów), operacje te trwają do czasu liniowego. Klasy takie jak NSString, które są częścią Fundacji, mają dobrą funkcję skrótu.

Tak więc dla NSString można oczekiwać stałego czasu na podstawie powyższego.

0

używa tabeli mieszania w swojej implementacji i testuje równość wszystkich elementów znajdujących się w kolizji hash. Więc wydajność jest bezpośrednio powiązana z wydajnością jego elementów.