2010-03-22 6 views
5

Ho incontrato lo stesso problema riscontrato in this question. Tuttavia, ho una domanda di follow-up. Mi sembra di essere nella stessa situazione del richiedente originale: ho un plist con una gerarchia di dizionari che definiscono una schermata di configurazione. Questi sono non modificabile e corrisponderanno allo durante l'applicazione. Dal momento che la discussione originale sembra concentrarsi sui problemi derivanti dal mutare il dizionario, devo chiedere conferma: l'ordine di un dizionario è lo stesso di quello che sono nel plist, vale a dire come viene letto (con initWithContentsOfFile)? Posso usare allKeys su di esso in questo caso per ottenere un array di chiavi di ordine corretto se il dizionario non cambia mai?L'ordine delle chiavi NSDictionary è uguale a quello inizializzato se non cambia mai?

risposta

7

No, è probabile che i tasti non vengano visualizzati nello stesso ordine del file plist. Non riesco a guardare sotto il cofano, ma suppongo che le chiavi siano ordinate in qualunque modo che offra una ricerca efficiente. La documentazione per allKeys indica che l'ordine degli elementi nell'array non è definito.

+0

La mia app li mostra nello stesso ordine del plist, che è stato uno dei motivi per cui ho iniziato a chiedermi. Ma ora so che non è indefinito. – Thaurin

+0

Nella mia app non si presentano sempre nello stesso ordine di plist - dipende dal plist che viene letto in quel momento. – xcoder

6

Se è necessario un che mantiene l'ordine, dare un'occhiata a CHDataStructure's CHOrderedDictionary, che fa esattamente questo. Io lo uso per tutto il tempo.

+0

Ne ho bisogno su iPhone, quindi Cocoa Touch. Mi chiedo se funziona su quello? In ogni caso, risponderò alla mia domanda: no, a quanto pare a NSDictionary non ci si aspetta che sia in alcun ordine. Quindi, sto facendo quello che ho visto suggerire da altri: includere un array con l'ordine e il tasto "_order". Le persone hanno detto che questa grossa goffa data-keeping non è poi così schifosa. Ancora goffo, però. – Thaurin

+1

Sì, il CHDataStructures funziona sia su Mac che su iPhone. –

3

Non darei per scontato che le chiavi siano in alcun tipo di ordine perché allKeys non garantisce l'ordine.

Internamente, NSDictionary uses a hash table.

Da allKeys description:

L'ordine degli elementi nella matrice non è definito.

Se si desidera visualizzare i valori in un determinato ordine, ottenere le chiavi, ordinare l'array di chiavi e ottenere il valore per ogni chiave.

2

Niente di tutto è garantito per l'ordine. Non è nemmeno garantito che iterare su un dizionario due volte ti darà le chiavi nello stesso ordine.