2010-02-09 22 views
5

¿Cómo crearía un número de variables NSDictionary usando el recuento de una matriz?Crear múltiples variables numeradas basadas en int

Esto es básicamente lo que se me ocurrió, pero no estoy seguro de cómo hacer que esto funcione con la sintaxis de Objective-C. doesntContainAnother es un NSArray. Quiero que los nombres de los diccionarios usen el valor actual de loopInt.

int *loopInt = 0; 
while (doesntContainAnother.count <= loopInt) { 

    NSMutableDictionary *[NSString stringWithFormat:@"loopDictionary%i", loopInt] = [[[NSMutableDictionary alloc] init] autorelease]; 
    [NSString stringWithFormat:@"loopDictionary%i", loopInt] = [NSDictionary dictionaryWithObject:[array1 objectAtIndex:loopInt] 
               forKey:[array2 objectAtIndex:loopInt]]; 
    loopInt = loopInt + 1; 
} 
+0

¿Puedes aclarar qué es lo que quieres? ¿Desea crear una matriz de diccionarios que contenga cada uno un solo valor? – kubi

Respuesta

4

crear una matriz mutable y bucle hasta que llegue a la cuenta de la matriz original, creando un diccionario y añadirla a la matriz mutable en cada iteración.

Su código debería verse así.

NSMutableArray *dictionaries = [[NSMutableArray alloc] init]; 
for (int i = 0; i < doesntContainAnother.count; i++) { 
    [dictionaries addObject:[NSMutableDictionary dictionaryWithObject:[array1 objectAtIndex:i] forKey:[array2 objectAtIndex:i]]]; 
} 

El enfoque de crear variables con números al final de sus nombres es un anti patrón y ni siquiera es posible en Objective-C. Es equivalente a una matriz, pero clunkier.

+0

Sí, eso tiene sentido. Actualicé mi pregunta con el código que se me ocurrió. Simplemente no sé cómo configurar el objeto como un nombre de variable. :/ –

+0

Eso es exactamente lo que estaba tratando de hacer. Lo tenía en mi cabeza, pero todavía soy demasiado nuevo para Objective-C, y para ser sincero, no creo haberlo hecho nunca en C++. –

2

Necesita crear una matriz mutable y luego colocar los objetos en la matriz. No puede crear una variable con el mismo nombre que el contenido de una cadena, como lo ha hecho. Por ejemplo:

NSMutableArray *arr = [[NSMutableArray alloc] initWithCapacity:[doesntContainAnother count]]; 
int i = 0; // Note: type is int, not int* 
for (i = 0; i < [doesntCountainAnother count]; i++) { 
    [arr addObject:[NSMutableDictionary dictionary]]; 
} 

// Later... 
NSMutableDictionary *d1 = [arr objectAtIndex:3]; 

O si quieres sacarlos de la lista por su nombre:

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:[doesntCountainAnother count]]; 
int i = 0; 
for (i = 0; i < [doesntContainAnother count]; i++) { 
    [dict setObject:[NSMutableDictionary dictionary] forKey:[NSString stringWithFormat:@"loopDictionary%d", i]]; 
} 

// Later... 
NSMutableDictionary *d1 = [dict objectForKey:@"loopDictionary3"]; 

Pero la primera manera es probablemente el más fácil.

+0

Gracias por explicar esto. Entiendo esto mucho mejor ahora :) –

Cuestiones relacionadas