【问题标题】:Retrieve values from NSDictionary with same keys使用相同的键从 NSDictionary 检索值
【发布时间】:2013-07-16 11:18:47
【问题描述】:
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 同样的问题。 我需要该键的所有值。这可能吗?

【问题讨论】:

  • 我不确定您是否了解字典的工作原理。为给定键设置新值将覆盖以前的值。
  • 您确实需要将图像存储在数组中,在具有唯一国家/地区键的字典中。
  • 嗨丹尼尔,我想知道这背后的逻辑。如果你想这样做是因为你得到了一个键的多个值。然后,您可以在数组中设置这些值,然后将该数组添加到您的 NSDictionary 中。据我所知,这对你有用。
  • 你应该添加[dict setObject:@[@"image1.jpg",@"image2.jpg", @"image3.jpg"] forKey:@"USA"];
  • 您只在上面插入了两个元素。这就是为什么你只能检索两个。

标签: objective-c nsdictionary nsmutabledictionary


【解决方案1】:

这是不可能的。 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"]

【讨论】:

  • 感谢 Florion 的回答。我想过这样做,但数据将由 API 检索,并且需要大量 nsarray,所以我需要以编程方式进行。
  • 是的,这应该不是问题。只需在运行时动态创建数组并将它们添加到字典中。
  • 非常感谢!似乎是最好的方法。
【解决方案2】:

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

 [dict setObject:@[@"image1.jpg",@"image2.jpg", @"image3.jpg"] forKey:@"USA"];

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-27
      • 2020-12-10
      • 2019-10-14
      • 1970-01-01
      相关资源
      最近更新 更多