将数组添加到 NSDictionary 中的不同键

Posted

技术标签:

【中文标题】将数组添加到 NSDictionary 中的不同键【英文标题】:Adding an array to different keys in NSDictionary 【发布时间】:2015-02-25 18:31:37 【问题描述】:

我正在向具有不同键的 NSDictionary 添加一个数组。 这是抽象:

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];   
    for (int i = 0; i < 3; i++) 
        [myArray removeAllObjects];      
        [myArray addObject:i];
        [myArray addObject:i];   
        [myArray addObject:i];   
        [myDict setObject:myArray forKey:[NSString stringWithFormat:@“%i”, i]];
         NSLog(@"%@", myDict);
     

这就是我得到的输出:

i = 1

“1” = ( “1”, “1”, “1”, “1” );

i = 2

“1” = ( “2”, “2”, “2”, “2” );

“2” = ( “2”, “2”, “2”, “2” );

i = 3

“1” = ( “3”, “3”, “3”, “3” );

“2” = ( “3”, “3”, “3”, “3” );

“3” = ( “3”, “3”, “3”, “3” );

但是如何获得呢?:

i = 3

“1” = ( “1”, “1”, “1”, “1” );

“2” = ( “2”, “2”, “2”, “2” );

“3” = ( “3”, “3”, “3”, “3” );

提前感谢您的帮助。

【问题讨论】:

您有问题吗? 你确定这是你正在运行的代码吗? 【参考方案1】:

您不能一遍又一遍地重复使用同一个数组。这样做:

NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];   
for (int i = 0; i < 3; i++) 
    NSMutableArray *myArray = [NSMutableArray array];
    [myArray addObject:@(i)];
    [myArray addObject:@(i)];   
    [myArray addObject:@(i)];   
    [myDict setObject:myArray forKey:[NSString stringWithFormat:@"%i", i]];
     NSLog(@"%@", myDict);
 

请注意,您不能将int 值直接添加到数组中。请注意,您需要将它们包装为 NSNumber 对象。

【讨论】:

这还能编译吗?将 int 添加到 NSMutableArray? @huhitschris 好点。我只是从 OP 的原始代码中复制了该代码。我已经更新了代码,所以它可以工作了。 我自己似乎无法进行此编辑,所以也许您可以做到:stringWithFormat: 参数有智能引号,请替换。 好吧,你当然可以一次又一次地重复使用同一个数组。它会导致奇怪和意想不到的不良影响,但你可以重复使用它。 @gasher729 您不能一遍又一遍地重用同一个数组来解决这个特殊问题。当然,一个数组通常可以一遍又一遍地添加。【参考方案2】:
NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
for (int i = 1; i < 4; i++) 
    NSMutableArray *myArray = [NSMutableArray arrayWithCapacity:3];
    [myArray addObject:[NSString stringWithFormat:@"%i", i]];
    [myArray addObject:[NSString stringWithFormat:@"%i", i]];
    [myArray addObject:[NSString stringWithFormat:@"%i", i]];
    [myDict setObject:myArray forKey:[NSString stringWithFormat:@"%i", i]];
    NSLog(@"%@", myDict);

【讨论】:

您不应发布纯代码答案。请添加一些错误说明以及需要进行哪些更改。 谢谢。我只是想按照他的要求去做“但是如何得到这个?:”我展示了如何得到这个。 不同之处在于您使用的是相同的数组对象,只是删除其内容并再次构建它,然后再次将其放入字典中。在您的代码中,您只是将相同的数组对象放入字典 3 次,因此对该数组对象的任何引用都会向您显示它当前包含的内容,而不是您最初将其放入字典时的内容。您必须在循环的每次迭代中创建一个新的数组对象,以便在字典中获得 3 个不同的数组对象。任何赞成票或接受将不胜感激。 明白了。感谢 mikomi 的解释。 unf,我没有足够的投票声望。但你的帮助对我来说是无价的!​​span> 所以我投了反对票,因为我给出了确切的工作代码,然后给出了一段解释,并且 OP 非常满意。很棒的社区。​​span>

以上是关于将数组添加到 NSDictionary 中的不同键的主要内容,如果未能解决你的问题,请参考以下文章

将 NSDictionary 保存到 plist

将整个数组添加到 nsdictionary

如何在 NSDictionary 中为键和对象添加数组

排序 NSDictionary

避免在 NSDictionary 中排序

如何使用 Swift 将新数组数据添加到 plist 文件中的 NSDictionary