使用相同的键从NSDictionary检索值

Dan*_*pos 2 objective-c nsdictionary nsmutabledictionary

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

如果我使用:

NSArray *keys = [dict allKeys];
Run Code Online (Sandbox Code Playgroud)

好吧,我有一个{USA,Brazil}阵列.

我想要的只是一个代码,我得到了美国的所有对象.如果我使用:

NSArray *objectsforKey = [dict objectForKey:@"USA"];
Run Code Online (Sandbox Code Playgroud)

我将得到一个只有一个项目的数组:image1.jpg valueforKey的相同问题.我需要该密钥的所有值.那可能吗?

Flo*_*ian 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;
Run Code Online (Sandbox Code Playgroud)

现在你可以得到这样的文件名:

NSArray *USA = dict[@"USA"]; // @[@"image1.jpg",@"image2.jpg",@"image3.jpg"]
NSArray *Brazil = dict[@"Brazil"]; // @[@"image1.jpg",@"image2.jpg"]
Run Code Online (Sandbox Code Playgroud)