如何在NSDictionary中获取唯一键?

时间:2012-11-12 02:53:37

标签: ios nsdictionary

这是我的NSDictionary:

locations: {
    509f3a914d026b589ba3a090 =     {
        coordinates =         {
            latitude = "29.76429";
            longitude = "-95.3837";
        };
        country = USA;
        id = 509f3a914d026b589ba3a090;
        name = Houston;
        state = Texas;
    };
    509f3b3a4d026b589ba3a091 =     {
        coordinates =         {
            latitude = "3.138722";
            longitude = "101.686849";
        };
        country = Malaysia;
        id = 509f3b3a4d026b589ba3a091;
        name = "Kuala Lumpur";
    };
    509f475b4d026b589ba3a093 =     {
        coordinates =         {
            latitude = "32.803468";
            longitude = "-96.769879";
        };
        country = USA;
        id = 509f475b4d026b589ba3a093;
        name = Dallas;
        state = Texas;
    };
}

我想要做的只是获取国家,你可以告诉我有两个“美国”的价值观。我只想推断美国和马来西亚。而不是美国,马来西亚,美国。

我希望我有意义

3 个答案:

答案 0 :(得分:4)

我认为最简单的方法是:

[NSSet setWithArray:[[dictionary allValues] valueForKey:@"country"]];

所以你:

  1. 获取顶级词典中所有值的数组;
  2. 在该数组上调用valueForKey: - 定义为依次对数组中的所有内容调用valueForKey:,然后返回答案数组,并在字典上valueForKey:为与objectForKey:相同,如果有问题的密钥不是“@”;
  3. 从结果数组中创建一个集合,从而解决任何重复。
  4. 如果您希望以数组结尾,可以在结果集上添加对allObjects的调用。

答案 1 :(得分:1)

假设您有一个名为locations的词典,并且词典中的一个对象是一个国家/地区。另外你说只是推断我会假设你想把它添加到某个数组或其他东西。对于此问题,您可以使用一组来确保您不会再次进入同一个国家/地区。

NSMutableSet *set = [NSMutableSet set];
NSMutableArray *array = [NSMutableArray array];

NSString *country = [locations objectForKey:@"country"]; 
if ([set containsObject:country])
{
    [array addObject:country]; // Extrapolating country from dictionary to array
    [set addObject:country]; // Addind it to set to check later
}

答案 2 :(得分:1)

我会这样做:

NSMutableArray *newArray = [NSMutableArray array];
NSMutableSet *currentCountries = [NSMutableSet set];
for(NSDictionary* dic in [[currentDict objectForKey:@"locations"] allValues])
{
    if(![currentCountries containsObject:[dic objectForKey:@"country"])
    {
        [currentCountries addObject:[dic objectForKey:@"country"]]
        [newArray addObject:dic];
    }
}