将数组添加到 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 中的不同键的主要内容,如果未能解决你的问题,请参考以下文章