2013-07-30 13 views
6

Zastanawiam się, jaka jest decyzja za wszystkimi metodami NSDictionary, aby zwrócić NSArray, zamiast NSSet, co miałoby więcej sensu, ponieważ nie ma gwarancji co do kolejności zwróconej tablicy Co więcej, klucz jest unikalny.NSDictionary allKeys zwraca NSArray, zamiast NSSet

+2

Sprzeciw; Spekulacja! –

+0

To nie jest przede wszystkim oparte na opiniach, a istnieje mnóstwo precedensów na podobne pytania. –

+1

Chociaż istnieje precedens dla takiego pytania, nie pytasz oryginalnych programistów, a wszystkie odpowiedzi mogą być tylko spekulacjami. Jeśli o to chodzi, to jest to kod NextStep, o który pytasz. Odpowiedź może brzmieć "kompatybilność API z dużo wcześniejszym czasem, niż myślisz". –

Odpowiedz

1

także wszyscy zgadywania ...

Ponieważ PO powiedział, każdy klucz jest unikalny. W przypadku tablicy lub zestawu znaków kod słownika musi zbierać klucze - koszt dotyczy obu. W zestawie przypadków każdy klucz musi zostać dodany do zestawu, co wiąże się z (bezcelowym, jak się okazuje) testem członkostwa, podczas gdy w przypadku tablicy nie jest wymagany test członkostwa - koszt dodania do tablicy powinien być mniejszy niż dodawanie do zestawu. Array wygrywa.

+0

Twoje powiedzenie o wstawieniu NSSet wymagałoby przeszukiwania O (n) duplikatu? Jeśli Apple był tak zaniepokojony wydajnością NSSet, dlaczego użyłoby go w wielu przypadkach, ale nie tego. –

+0

Spojrzenie na kod źródłowy pokazuje mi, że używają tabeli mieszania O (1) dla NSSet. Zduplikowana rozdzielczość nie ma wpływu. –

+0

@JustinMeiners - Ostrożnie nie wspomniałem O() ;-) Ale czy mówisz, że zbadałeś źródło lub tablicę i ustawiłeś i ustaliłeś, że koszt czeku wynosi * zero *, a to nie ma wpływu na koszt dodania element do tablicy i do zestawu są równe? Ale jeśli w kodzie nie ma komentarzy, wszyscy dobrze się bawią, można argumentować za wyborem - a może nawet arbitralnie. – CRD

1

Poza tym, co powiedział Justin, jeśli rzeczywiście chciałeś mieć listę kluczy słownikowych, musisz zdobyć NSSet, a następnie przekonwertować go na NSArray. Jeśli chcesz po prostu przetestować kluczową egzystencję, OTOH, możesz przejść bezpośrednio do słownika i nie potrzebujesz zestawu.

Powiązane problemy