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} Array を手に入れた。

私が欲しいのは、USA のすべてのオブジェクトを取得するコードだけです。私が使用する場合:

NSArray *objectsforKey = [dict objectForKey:@"USA"];

image1.jpg valueforKeyについて も同じ問題があります。そのキーのすべての値が必要です。それは可能ですか?

4

3 に答える 3

9

それは不可能です。NSDictionary は、キーごとに 1 つのオブジェクトのみを格納します。あなたのコードでは、呼び出し時に前のオブジェクトを置き換えています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 に答える
1

実際には、キーは一意である必要があります。このように設定すると、キー「USA」の最後の値は「image3.jpg」になり、キー「ブラジル」は「image1.jpg」を「image2.jpg」でオーバーライドします。

于 2013-07-16T11:23:35.250 に答える