2012-02-23 25 views

Odpowiedz

31

Zarówno NSDictionary, jak i NSArray są klasami kolekcji, tj. Grupują razem inne obiekty.

NSArray to "uporządkowana kolekcja" - każda pozycja w kolekcji ma indeks liczby całkowitej, więc istnieje wyraźne zamówienie na te elementy. Jeśli zamienisz kolejność elementów w kolekcji, kolekcja nie będzie już taka sama, jak kolejność jest inna. Obiekt może pojawić się więcej niż jeden raz w kolekcji.

NSSet to "nieuporządkowana kolekcja" - każda pozycja pojawia się w torbie, kolejność nie ma znaczenia, a obiekt może istnieć tylko raz w torbie.

NSDictionary to "kolekcja indeksowana" - każda pozycja w kolekcji ma klucz i można ją pobrać za pomocą tego klucza. Obiekt może pojawić się więcej niż jeden raz, ponieważ różne klawisze mogą wskazywać na ten sam obiekt, ale klucz może pojawić się tylko raz. Słownik jest także formą "tablicy mieszania", jeśli masz wykształcenie informatyczne.

Podczas analizowania PLISTów, tablice i słowniki są głównymi typami, którymi się zajmujesz. Kiedy edytujesz PLIST w Xcode - jeśli ustawisz coś jako typ tablicy, to wszystkie jego dzieci są wymienione jako "Pozycja 0, Pozycja 1, Pozycja 2 ...", a jeśli ustawisz jako typ Słownika, to jest to dzieci są parami klucz: wartość.

Jeden znaczący przypadek użycia dla typów różnic jest następujący.

Wyobraź sobie aplikację magazynu zawierającą wiele artykułów. Kolejność artykułów jest ważna, dlatego każdy artykuł będzie przechowywany w tablicy. Jeśli chcesz zmienić kolejność artykułów, zmieniłbyś kolejność tablic w pliku plist.

samych wyrobów mogą być reprezentowane przez słowniki, może zawierający przycisków takich jak „tekstowy”, „Tło”, „ArticleType”. Używasz Słownika, ponieważ możesz dodać więcej informacji do słownika w pewnym momencie w przyszłości, a mechanizm klucza: wartość sprawi, że twój kod będzie zrozumiały.

+0

Wielkie dzięki za wyjaśnienie tego! To naprawdę pomogło. –

+0

Dziękuję. Oszczędził mój czas. – Raja

4

Tablica jest po prostu posortowaną listą obiektów. Słownik przechowuje pary klucz-wartość.

Na przykład:

Array: obj1, obj2, ob3, ... 

słownik:

{ 

    @"Name": @"Bob" 

    @"Age": 20 (but NSDictionary can only store objects, so that would be a NSNumber) 

} 

Nie ma zalety i wady, są tylko dwie struktury danych i korzystać z jednego, czego potrzebujesz.

2

Słowniki kojarzą klucz z wartością (obiektem) i nie zachowują kolejności pozycji. Dostęp do tablicy odbywa się według indeksu - zamówienie jest zachowane. PLIst dodaj możliwość użycia użyj XML do zdefiniowania danych (klucz, para wartości).

-2

NSDictionary nie zachowuje swoje obiekty „wartość”, ale NSMutableArray zachować obiektów dodanych do niego. Więcej informacji: NSDictionary i NSArray

+1

To jest nieprawidłowe - NSDictionary zachowuje swoje wartości, ale nie klucze. – ikuramedia

4

Kluczową różnicą jest to, w jaki sposób można uzyskać do nich dostęp.

Obie tablice i słowniki są kontenerami i można je czytać sekwencyjnie (np. Tablice można wyliczyć za pomocą indeksu i słowników za pomocą klawisza). Ale podczas gdy tablice zachowują porządek między obiektami, słowniki nie.

Ponadto za pomocą słowników masz możliwość dostępu do określonego obiektu z określonym kluczem w sposób bardziej przyjazny dla użytkownika (mnemoniczny). Na przykład w słowniku wiesz na pewno, że z określonym kluczem, powiedzmy "tekst", jest powiązany określony obiekt, na przykład NSString. To samo może być ważne dla tablicy, ale z pewnymi trudnościami. Na przykład, jak się masz pewność, że w indeksie 0 znajduje się konkretny obiekt NSString?

O twoim pytaniu io ile wiem (od Xcode 4), plists mają jako obiekt główny słownik. Aby uzyskać więcej informacji, patrz how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4.

Mam nadzieję, że to pomaga.

-1

NSDictionary jest przydatny, gdy chcesz uzyskać dostęp do określonej wartości klucza. NsArray jest przydatny, gdy chcesz uzyskać dostęp do danych sekwencyjnych.

Powiązane problemy