2012-02-23 25 views

risposta

31

Entrambe NSDictionary e NSArray sono classi di raccolta, ovvero raggruppano altri oggetti.

Un NSArray è una "raccolta ordinata": ogni elemento della raccolta ha un indice intero, quindi esiste un ordine esplicito per gli articoli. Se si scambia l'ordine degli articoli nella raccolta, la raccolta non è più la 'stessa' in quanto l'ordine è diverso. Un oggetto può apparire più di una volta nella collezione.

Un NSSet è una "raccolta non ordinata": ogni articolo appare in una borsa, l'ordine non ha importanza e un oggetto può esistere solo una volta nella borsa.

Un NSDictionary è una "raccolta indicizzata": ogni elemento della raccolta ha una chiave e può essere recuperato con quella chiave. Un oggetto può apparire più di una volta, in quanto chiavi diverse potrebbero puntare allo stesso oggetto, ma una chiave può apparire solo una volta. Un dizionario è anche una forma di 'tabella hash' se si dispone di uno sfondo di informatica.

Durante l'analisi di PLIST, Array e Dizionari sono i principali tipi con cui si gestiscono. Quando modifichi un PLIST in Xcode - se imposti qualcosa come tipo Array, tutti i relativi figli sono elencati come "Articolo 0, Articolo 1, Articolo 2 ..." mentre se lo imposti come tipo di dizionario, allora è i bambini sono la chiave: coppie di valori.

Un caso di utilizzo significativo per i tipi di differenza è il seguente.

Immaginate un'applicazione di una rivista che contenga un numero di articoli. L'ordine degli articoli è importante, quindi memorizzerai ogni articolo in un array. Se si desidera modificare l'ordine degli articoli, si modificherà l'ordine dell'array nel plist.

Gli articoli stessi possono essere rappresentati da dizionari, forse contenenti chiavi come "TextFile", "Background", "ArticleType". Si utilizza un dizionario perché è possibile aggiungere ulteriori informazioni al dizionario in un momento futuro e la chiave: il meccanismo del valore rende comprensibile il codice.

+0

Grazie mille per aver spiegato questo! Mi ha davvero aiutato. –

+0

Grazie. Mi ha salvato il tempo. – Raja

4

Un array è solo un elenco ordinato di oggetti. Un dizionario memorizza le coppie chiave-valore.

Ad esempio:

Array: obj1, obj2, ob3, ... 

Dizionario:

{ 

    @"Name": @"Bob" 

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

} 

ci sono vantaggi o svantaggi, sono solo due strutture di dati, e si utilizza quello che vi serve.

2

I dizionari associano una chiave con un valore (oggetto) e non conservano l'ordine degli articoli. L'accesso alla matrice è fatto per indice - l'ordine è preservato. PLIst aggiungi la capacità usa use XML per definire i dati (chiave, coppie di valori).

-2

NSDictionary non conserva gli oggetti "valore", ma un NSMutableArray conserva gli oggetti aggiunti. Per ulteriori informazioni: NSDictionary e NSArray

+1

Questo non è corretto - NSDictionary conserva i suoi valori, ma non le sue chiavi. – ikuramedia

4

La differenza chiave è come accedere a questi.

Sia gli array che i dizionari sono contenitori e possono essere letti in sequenza (ad esempio, gli array possono essere enumerati mediante un indice e dizionari mediante una chiave). Ma mentre gli array mantengono l'ordine tra gli oggetti, i dizionari no.

Inoltre, con i dizionari è possibile accedere a un oggetto specifico con una chiave specifica in un modo più intuitivo (uno mnemonico). Ad esempio, in un dizionario sai per certo che con un tasto specifico, ad esempio "testo", viene associato un oggetto specifico, ad esempio NSString. Lo stesso potrebbe valere per un array ma con alcune difficoltà. Ad esempio, come è sicuro che nell'indice 0 ci sia l'oggetto specifico NSString?

Informazioni sulla tua domanda e per quanto ne so (dal momento che Xcode 4), i plists hanno come oggetto radice un dizionario. Per ulteriori informazioni vedi how-do-you-change-a-plists-root-object-type-to-nsarray-in-xcode-4.

Spero che aiuti.

-1

NSDictionary è utile quando si desidera accedere a un particolare valore di chiave. NsArray è utile quando si desidera accedere a dati sequntial.

Problemi correlati