Mam na myśli: czy kolejność klawiszy i wartości w NSDictionary zawsze jest taka sama jak w przypadku ich określenia podczas inicjowania NSDictionary? Czy powinienem lepiej utrzymać oddzielne NSArray, jeśli naprawdę potrzebuję znać kolejność kluczy?Czy klucze i wartości w zamówionym NSDictionary?
Odpowiedz
Nie, nie są zamówione. Dopóki nie dodasz lub nie usuniesz żadnych elementów ze słownika, pozostaną one w tej samej kolejności, ale zaraz po dodaniu lub usunięciu elementu nowe zamówienie będzie zupełnie inne.
Jeśli potrzebujesz kluczy/wartości do zamówienia, użyj zamiast tego opcji NSArray (lub innej uporządkowanej struktury danych).
Klucze nigdy nie są gwarantowane w tej samej kolejności podczas uzyskiwania dostępu do NSDictionary. Jeśli można porównać klucze (co do których zakładam, że można im zadać pytanie), zawsze możesz je posortować, jeśli potrzebujesz dostępu do nich w posortowanej kolejności.
Musisz to zrobić, najpierw odczytując klucze do tablicy i oczywiście sortując tablicę.
NSDictionary, zgodnie z Apple's reference, jest w zasadzie wrapper wokół tabeli hash. Więc nie, nie ma gwarancji, że będą w jakiejś określonej kolejności.
Jak uzyskać dostęp do tabeli mieszania? Nigdy nie widziałem zwykłego stołu mieszającego, ale chciałbym wiedzieć, jak to wygląda. Czy to duża różnica w porównaniu z używaniem dwóch synchronicznych NSArray wewnętrznie? –
Czy pytasz, jak wygląda tablica asocjacyjna jako struktura danych? Wiki ma całkiem dobrą eksplorację: http: //en.wikipedia.org/wiki/Hash_table Jeśli chcesz wiedzieć, w jaki sposób Apple implementuje je i uzyskuje do nich dostęp, obawiam się, że jedyne dostępne dla nas pliki nagłówkowe;) –
, więc kiedy mam to prawo, tablica asocjacyjna prawie funkcja skrótu, która obliczy poprawny indeks tablicy dla danego klucza-klucza + rozmiar tablicy. Brzmi trudno, ale jest dobry do wykonania. Jeśli to prawda, nie ma znaczenia, ile elementów zostanie dodanych do słownika. –
Klucze NSDictionary & wartości nie są uporządkowane. Dostępne opcje:
- utrzymać oddzielny układ klawiszy w celu chec
- zapis lub znajdź istniejącą klasę, która jest opakowaniem dla powyższego
- pisać lub znaleźć istniejący podklasę NSDictionary która dodaje Interfejsy API do zamawiania
Matt Gallagher napisał wpis na blogu pod tytułem “OrderedDictionary: Subclassing a Cocoa class cluster” dotyczący dokładnie tego problemu, wraz z przykładowym kodem.
W rzeczywistości nie można nawet polegać na tym, że zamówienie jest takie samo podczas uruchamiania programu na dwóch różnych urządzeniach, nawet jeśli jest to dokładnie ten sam program i dokładnie ta sama wersja systemu operacyjnego.
Na przykład, jeśli uruchomisz program na iPadzie Air, kolejność elementów wewnątrz NSDictionary może być inna niż w przypadku uruchamiania tego samego programu na siatkówce iPada, nawet jeśli wersja na iOS jest dokładnie taka sama.
Podsumowując, zamawianie elementów w NSDictionary nigdy nie może być oparte na zasadzie. Musisz zawsze zakładać, że mogą znajdować się w dowolnej nieokreślonej kolejności, która może być różna na różnych urządzeniach.
- 1. Klucze w NSDictionary można duplikować?
- 2. Jak uzyskać wszystkie klucze i wartości w oddzielnych tablicach ciągów od NSDictionary w Swift?
- 3. NSDictionary wartości dostępu skrót
- 4. Uzyskaj klucze i wartości w wierszu polecenia
- 5. Czy słownik Objective-C jest zamówionym kontenerem?
- 6. Jak mogę uzyskać wartość/klucze obiektów NSDictionary w konsoli debuggera?
- 7. W NSDictionary można określić typ danych wartości?
- 8. NSDictionary i dane podstawowe
- 9. MySql złożone klucze i wartości null
- 10. Inicjowanie NSDictionary
- 11. klucze inwertowany i wartości oryginalnej słowniku
- 12. uzyskać wartości określonego klucza w NSDictionary
- 13. array_walk_recursive - zmodyfikuj oba klucze i wartości
- 14. klucze PHP tablicy wartości
- 15. Grupa przez wiele wartości underscore.js ale zachować klucze i wartości
- 16. Upiększyć NSLog NSArray i NSDictionary
- 17. Czy NSDictionary może zawierać różne typy obiektów jako wartości?
- 18. Czy w haasie mogą znajdować się zduplikowane klucze lub wartości?
- 19. Jak połączyć klucze i wartości z tablicy w PHP
- 20. Jak zamienić klucze i wartości w Mapie elegancko
- 21. W Django, jak wyczyścić wszystkie memcached klucze i wartości?
- 22. Get wartości i klucze w obiekcie json używając Json.Net C#
- 23. Rewers wartości tablicy zachowując klucze
- 24. dostać klucze dla zduplikowanych wartości w tablicy
- 25. Sprawdź, czy NSDictionary jest pusty
- 26. Czy mogę umieścić SelectiveC @ selektor w NSDictionary?
- 27. Jak przechowywać NSArray w NSDictionary?
- 28. Konwersja map klucze i wartości do tablicy ciągów
- 29. Redis/Uzyskaj wszystkie klucze i wartości od redis z prefiksem
- 30. Zapisywanie NSDictionary do NSUserDefaults
@ kraag22: Nigdzie w dokumentacji 'NSDictionary' nie składa żadnych obietnic ani gwarancji dotyczących zamówienia - po prostu mówi, że zapewnia" programowy interfejs do obiektów zarządzających niezmiennymi związkami kluczy i wartości ". Dokumenty dla komunikatów '-allKeys' i' -allValues' wywołują, że kolejność zwrócona przez te metody nie jest zdefiniowana, chociaż prawdopodobnie nie byłoby złym pomysłem uczynienie tego bardziej wyraźnym dla innych sposobów wyliczania elementy słownika. –