2009-08-14 7 views
27

Tengo un NSDictionary donde cada tecla apunta a una matriz. Luego deseo fusionar todos los valores en una matriz. ¿Hay una manera de utilizar la API de hacer algo más eficiente que decir:Fusionando NSArrays en Objective-C

NSArray *anArray = [someDictionary allValues]; 
NSMutableArray *newArray = [NSMutableArray array]; 
start outter loop on anArray 
    start inner loop on objects in anArray 
    add objectAtIndex to newArray 
+0

Respondido en http://stackoverflow.com/q/8569388/78336 – neoneye

Respuesta

59

sólo tiene que utilizar [newArray addObjectsFromArray:anArray];

+0

Hola Ben, si lo hago de esta manera, no tengo una matriz plana. Tengo una matriz de matrices. Estaba viendo si era posible hacerlo sin el bucle. – Coocoo4Cocoa

+1

Esto todavía debería darle una matriz plana; no está agregando la matriz, está agregando los objetos desde la matriz. –

+1

Coocoo4Cocoa: Creo que has confundido 'addObject' **' FromArray: '** con' addObject: '. 'addObject:' agrega * la matriz * a la nueva matriz, mientras que lo que Chuck y Ben Gottlieb sugirieron agrega los elementos en la matriz a la nueva matriz. –

19

Existe cierta confusión en la respuesta de Benn Gottlieb anteriormente. Para aclarar, sugiere usar addObjectsFromArray en lugar del bucle interno, mientras que Coocoo está confundido porque cree que se sugiere como un reemplazo para TODO el bucle. (Si lo hace, que de hecho se quedará con una matriz sin acoplar de matrices como por su objeción.)

Aquí es una solución elegante razonablemente que no requiere ningún bucle explícito:

NSArray *anArray = [someDictionary allValues]; 
NSArray *flattenedArray = [anArray valueForKeyPath: @"@unionOfArrays.self"]; 

por cierto este código dejará duplicados en la matriz aplanada. Si desea eliminar duplicados, use distinctUnionOfArrays en lugar de unionOfArrays.

+6

Hoy en día, esta es una solución mejor que todas las anteriores. – Cezar