2012-11-12 52 views
1

这是我的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; 
    }; 
} 

我所想要做的是刚刚拿到的国家和你能告诉我有两个值“USA”。我只是想推断美国和马来西亚。而不是美国,马来西亚,美国。

我希望我做的意义

+0

所以你不想读第一国后的任何其他字典? –

回答

3

我认为最简单的方法是:

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

所以你:

  1. 得到所有值的数组在顶级字典中;
  2. 呼叫valueForKey:该阵列上 - 这被定义为来电valueForKey:的一切又在数组中,然后返回答案的数组,并valueForKey:在一本字典是一样的objectForKey:如果有问题的关键不存在与 '@';
  3. 从结果数组中创建一个集合,从而解决任何重复问题。

如果您想要结束数组,则可以在结果集上添加对allObjects的调用。

1

假设你有一个叫字典位置和在你的字典中的对象之一是一个国家。你也只是说外推我会假设你想把它添加到一些数组或其他东西。对于这个问题,你可以使用一套来确保你不再进入同一个国家。

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 
} 
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]; 
    } 
} 
相关问题