2
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 的相同问题。我需要该键的所有值。那可能吗?

4

3 回答 3

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"]
于 2013-07-16T11:24:32.843 回答
2

这是不可能的。您应该添加一个数组-

 [dict setObject:@[@"image1.jpg",@"image2.jpg", @"image3.jpg"] forKey:@"USA"];
于 2013-07-16T11:29:26.150 回答
1

实际上 key 应该是唯一的。如果您将这样设置,则“USA”键的最后一个值为“image3.jpg”,而“Brazil”键将用“image2.jpg”覆盖“image1.jpg”。

于 2013-07-16T11:23:35.250 回答