在循环中向字典添加对象会覆盖以前的值

dba*_*ett 3 cocoa-touch nsdictionary nsarray ios

我有三个NSArray,我想将它们全部合并为一个NSDictionary.问题是当我遍历数组并创建字典时,它会覆盖前一个对象.最后我在字典中只有一个对象.我究竟做错了什么?这是我的代码:

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"];
}
Run Code Online (Sandbox Code Playgroud)

也许这会澄清我的意思......这是我想要的结果:

{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
Run Code Online (Sandbox Code Playgroud)

谢谢

E-R*_*die 5

问题

您正在插入并替换特定键上的同一对象.所以字典的所有内容都是最后一个索引的最后一个对象.

使用此代码将三个数组添加到一个包含特定键的字典中.

NSDictionary *yourDictinary = @{@"one": array0, @"two": array1, @"three": array3};
Run Code Online (Sandbox Code Playgroud)

编辑

如果您需要将您的对象添加NSMutableArrays到一个NSDictionary你可以按照张贴@ElJay答案,但是这不是一个好的做法,因为你是在处理与独特的键选择多个对象.

更新

为了做到这一点,我们讨论的是单个NSMutableArray和多个NSDictinarys.

请遵循以下代码:

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];
}
Run Code Online (Sandbox Code Playgroud)