objective-c string variables variable-names

objective c - Crea mĂșltiples variables numeradas basadas en un int



objective-c string (2)

¿Cómo crearía un número de variables NSDictionary utilizando el recuento de una matriz?

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; }


Cree una matriz mutable y bucle hasta llegar al recuento de la matriz original, crear un diccionario y agregarlo a la matriz mutable en cada iteración.

Tu 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 antipatrón y ni siquiera es posible en Objective-C. Es equivalente a una matriz, pero clunkier.


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 desea 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 forma es probablemente la más fácil.