NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:@"image1.jpg" forKey:@"USA"];
[dict setObject:@"image2.jpg" forKey:@"USA"];
[dict setObject:@"image3.jpg" forKey:@"USA"];
[dict setObject:@"image1.jpg" forKey:@"Brazil"];
[dict setObject:@"image2.jpg" forKey:@"Brazil"];
如果我使用:
NSArray *keys = [dict allKeys];
很好,我有一个{USA,Brazil}阵列。
我想要的只是一个代码,我得到了美国的所有对象。如果我使用:
NSArray *objectsforKey = [dict objectForKey:@"USA"];
我将得到一个只有一个项目的数组: image1.jpg valueforKey的问题相同。 我需要该密钥的所有值。这可能吗?
答案 0 :(得分:9)
这是不可能的。 NSDictionary仅为每个键存储一个对象。在您的代码中,您在调用setObject:forKey:
时将替换上一个对象。
解决方案是将数组存储在字典中:
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
NSMutableArray *USAImages = [NSMutableArray array];
[USAImages addObject:@"image1.jpg"];
[USAImages addObject:@"image2.jpg"];
[USAImages addObject:@"image3.jpg"];
dict[@"USA"] = USAImages;
NSMutableArray *BrazilImages = [NSMutableArray array];
[BrazilImages addObject:@"image1.jpg"];
[BrazilImages addObject:@"image2.jpg"];
dict[@"Brazil"] = BrazilImages;
现在你可以得到这样的文件名:
NSArray *USA = dict[@"USA"]; // @[@"image1.jpg",@"image2.jpg",@"image3.jpg"]
NSArray *Brazil = dict[@"Brazil"]; // @[@"image1.jpg",@"image2.jpg"]
答案 1 :(得分:2)
不可能。 你应该添加一个数组 -
[dict setObject:@[@"image1.jpg",@"image2.jpg", @"image3.jpg"] forKey:@"USA"];
答案 2 :(得分:1)
实际上密钥应该是唯一的。如果你设置像这样的键“USA”将有值的最后一个值为“image3.jpg”,键“Brazil”将覆盖“image1.jpg”和“image2.jpg”。