Agregar objects al dictionary en un ciclo sobrescribe valores anteriores.

Tengo tres NSArray s, y quiero combinarlos todos en un solo NSDictionary . El problema es que, al repasar las matrices y crear el dictionary, sobrescribe el object anterior. Al final, solo tengo un object en mi dictionary. ¿Qué estoy haciendo mal? Aquí está mi código:

 NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; for(int i=0; i<[array0 count]; i++) { [dict setObject:[array0 objectAtIndex:i] forKey:@"one"]; [dict setObject:[array1 objectAtIndex:i] f orKey:@"two"]; [dict setObject:[array2 objectAtIndex:i] forKey:@"three"]; } 

Tal vez esto aclarará lo que quiero decir … este es el resultado que voy a search:

 {one = array0_obj0, two = array1_obj0, three = array2_obj0}, {one = array0_obj1, two = array1_obj1, three = array2_obj1}, {one = array0_obj2, two = array1_obj2, three = array2_obj2}, etc 

Gracias

Aqui tienes:

 NSMutableDictionary *dict = [[NSMutableDictionary alloc] init]; for(int i=0; i<[array0 count]; i++) { [dict setObject:[array0 objectAtIndex:i] forKey:[NSString stringWithFormat:@"arr0_%d", i]]; [dict setObject:[array1 objectAtIndex:i] forKey:[NSString stringWithFormat:@"arr1_%d", i]]; [dict setObject:[array2 objectAtIndex:i] forKey:[NSString stringWithFormat:@"arr2_%d", i]]; } 

Editar – con una pregunta revisada:

 self.array0 = @[@"Array0_0",@"Array0_1",@"Array0_2", @"Array0_3"]; self.array1 = @[@"Array1_0",@"Array1_1",@"Array1_2", @"Array1_3"]; self.array2 = @[@"Array2_0",@"Array2_1",@"Array2_2", @"Array2_3"]; NSMutableArray *finalArray = [[NSMutableArray alloc] init]; for (int i=0; i< [_array0 count]; i++) { NSDictionary *dict = @{@"one":[_array0 objectAtIndex:i], @"two":[_array1 objectAtIndex:i],@"three":[_array2 objectAtIndex:i]}; [finalArray addObject:dict]; } NSLog(@"finalArray = %@", [finalArray description]); 

Problema

Está insertando y reemplazando el mismo object en la key específica. Entonces, todo lo que tiene el dictionary es su último object en el último índice.

Solución

Use este código para agregar las tres matrices en un dictionary con sus keys específicas.

 NSDictionary *yourDictinary = @{@"one": array0, @"two": array1, @"three": array3}; 

Editar

Si necesita agregar objects de NSMutableArrays a un NSDictionary , puede seguir la respuesta publicada por @ElJay, pero esa no es una buena práctica, ya que se trata de múltiples objects con keys únicas.

Actualizar

Para hacer eso, estamos hablando de un solo NSMutableArray y múltiples NSDictinarys.

Sigue este código:

 NSMutableArray *allObjects = [NSMutableArray new]; for(int i=0; i<[array0 count]; i++) { dict = @{@"one": array0[i], @"two": array1[i], @"three": array2[i]}; [allObjects addObject:dict]; } 

Está reutilizando las keys ("one", "two" and "three") través de cada iteración del ciclo. Las keys en un NSDictionary tienen que ser únicas.

Si desea muchos dictionarys pero solo tres, debería save cada dictación en una matriz.