Domanda

NSDictionary è buono per le coppie chiave-valore, secondo quale struttura di dati è meglio quando hai tre valori? È meglio creare una classe per quei 3 valori e quindi lasciare che ogni oggetto in un array contenga istanze di quella classe?

Per essere precisi: la struttura dei dati, chiamiamola Persona, immagino abbia tre valori: Nome (NSString), (int) età, (BOOL) isAlive

Questi sarebbero mantenuti in array (?). È importante essere in grado sia di usare il nome come chiave, sia di fare riferimento all'intero blocco con un numero, iniziando da zero.

È stato utile?

Soluzione

Se hai una chiave e due valori, probabilmente creeresti una classe per i due valori e utilizzeresti comunque un dizionario.

Se hai due chiavi e un valore, probabilmente useresti un dizionario nidificato, ovvero un dizionario in cui la chiave è la prima chiave e il valore è un altro dizionario. La chiave per il dizionario nidificato sarebbe la seconda chiave e il valore sarebbe il tuo valore reale.

ETA:

Ora che hai chiarito la tua domanda: se devi accedere alla tua raccolta sia per chiave che per indice intero, puoi comunque usare un dizionario.

Per ottenere un elemento in base alla chiave, devi fare questo:

[myDict objectForKey:@"joe"];

Per ottenere un elemento per indice, è possibile utilizzare l'array allKeys:

[myDict objectForKey:[[myDict allKeys] objectAtIndex:1]];

Se l'unico scopo per ottenere le persone in base all'indice è eseguire un ciclo sull'intera raccolta, sarebbe meglio esaminare il metodo keyEnumerator per enumerare le chiavi in ??un ciclo e utilizzare quelle chiavi per cercare i valori.

/ p>

Altri suggerimenti

È possibile utilizzare i dati di base per rappresentare relazioni di dati più complesse, utilizzando un modello di database relazionale.

Controlla il sito degli sviluppatori di apple per esempi e documentazione.

All'inizio può sembrare non correlato, ma dai un'occhiata alla struttura orientata al dizionario in questa Introduzione a Attacchi al cacao . (CocoaDevCentral e Scott Stevenson sono grandi risorse per i nuovi sviluppatori di Cocoa.) L'approccio che utilizza è estremamente flessibile e facile da cambiare lungo la strada. L'utilizzo di un dizionario al posto di ivars non è sempre la soluzione migliore, ma potrebbe essere adatto alle tue esigenze.

Nota: come i Core Data, anche i Cocoa Bindings sono un argomento molto complesso. Sto suggerendo di utilizzare solo l'aspetto organizzativo del tutorial, senza andare oltre con i binding. : -)

Dipende se stai cercando di creare una sorta di struttura di dati generalizzata o meno. Se le "tre" cose sono concetti particolari all'interno della tua app, allora potresti essere diretto verso un modello di dominio - nel qual caso potresti essere saggio incapsulare questi valori in una classe.

Se hai bisogno di una funzionalità simile a un dizionario - [NSDictionary objectForKey:] ecc. - puoi comunque utilizzare uno o più dizionari come indici che associano i valori chiave alle istanze della tua classe.

Devi esaminare CoreData (se lo stai memorizzando) e definire una classe per il tuo oggetto. Gli oggetti generici nativi come NSDictionary non sono pensati per la memorizzazione di valori complessi che compongono oggetti complessi come una Persona.

Person *person = [[Person alloc] init];
person.firstName = @"blah";
person.age = 24;
person.isAlive = YES;

Non è questa la descrizione di un array bidimensionale ?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top