Pregunta

NSDictionary es bueno para pares clave-valor, ¿para qué estructura de datos es mejor cuando tiene tres valores? ¿Es mejor crear una clase para esos 3 valores y luego dejar que cada objeto en una matriz contenga instancias de esa clase?

Para ser específico: la estructura de datos, llamémosla Persona, imagino que tiene tres valores: Nombre (NSString), (int) edad, (BOOL) isAlive

Estos se mantendrían en una matriz (?). Es importante poder usar el nombre como clave y también referirse a todo el bloque con un número, comenzando en cero.

¿Fue útil?

Solución

Si tiene una clave y dos valores, probablemente cree una clase para los dos valores y aún use un diccionario.

Si tiene dos claves y un valor, probablemente usaría un diccionario anidado, es decir, un diccionario donde la clave es la primera clave y el valor es otro diccionario. La clave para el diccionario anidado sería la segunda clave, y el valor sería su valor real.

ETA:

Ahora que ha aclarado su pregunta: si necesita acceder a su colección tanto por clave como por índice entero, aún puede usar un diccionario.

Para obtener un elemento por clave, debe hacer esto:

[myDict objectForKey:@"joe"];

Para obtener un elemento por índice, puede usar la matriz allKeys:

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

Si el único propósito para obtener a las personas por índice es recorrer toda la colección, sería mejor usar el método keyEnumerator para enumerar las claves en un bucle y usar esas claves para buscar los valores.

Otros consejos

Puede usar datos básicos para representar relaciones de datos más complejas, utilizando un modelo de base de datos relacional.

Visite el sitio de desarrolladores de Apple para ver ejemplos y documentación.

Puede parecer no relacionado al principio, pero revise la estructura orientada al diccionario en esta Introducción a Enlaces de cacao . (CocoaDevCentral y Scott Stevenson son excelentes recursos para los nuevos desarrolladores de Cocoa). El enfoque que utiliza es extremadamente flexible y fácil de cambiar en el futuro. Usar un diccionario en lugar de ivars no siempre es la mejor solución, pero podría ser una buena opción para sus necesidades.

Nota: Al igual que Core Data, Cocoa Bindings también es un tema muy complejo. Estoy sugiriendo usar solo el aspecto organizativo del tutorial, no ir completamente con enlaces. :-)

Depende de si está intentando hacer algún tipo de estructura de datos generalizada o no. Si las 'tres' cosas son conceptos particulares dentro de su aplicación, entonces puede estar dirigiéndose hacia un modelo de dominio - en cuyo caso puede ser conveniente encapsular estos valores en una clase.

Si necesita una funcionalidad similar a un diccionario ([NSDictionary objectForKey:] etc.), aún puede usar uno o más diccionarios como índices que asignan valores clave a sus instancias de clase.

Debe examinar CoreData (si lo está almacenando) y definir una clase para su objeto. Los objetos genéricos nativos como NSDictionary no están destinados a almacenar valores complejos que componen objetos complejos como una Persona.

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

¿No es esa la descripción de una matriz bidimensional ?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top