Ios NSDictionary数组 – 分组值和键

我有以下结果的数组的NSDictionary

 Bath = { Keynsham = ( "nsham companies" ); }; Bath = { "Midsomer Norton" = ( "Keynsham companies" ); }; Bath = { "Norton Radstock" = ( "Keynsham taxi companies" ); }; Birmingham = { "Acock's Green" = ( "Acock's Green taxi companies" ); }; Birmingham = { "Alcester Lane's End" = ( "Alcester Lane's End taxi companies" ); }; 

我怎样才能结合的价值观和关键,使我最终只有一个类别如下所示;

 Bath = { "Norton Radstock" = ( "Keynsham taxi companies" ); "Midsomer Norton" = ( "Keynsham companies" ); Keynsham = ( "nsham companies" ); }; 

我不确定这是否是解释它的最好方法,代码如下

//分配/初始化所有Nssarrays

  NSURL *url=[NSURL URLWithString:@"http://y.php"]; NSData *data= [NSData dataWithContentsOfURL:url]; NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:Nil]; //instantiate arrays to hold data NSMutableDictionary *dictArray=[[NSMutableDictionary alloc]init]; NSArray *cityName=[[NSArray alloc]init]; NSArray *townName=[[NSArray alloc]init]; NSArray *taxis=[[NSArray alloc]init]; NSArray *ids=[[NSArray alloc]init]; for (int i=0; i<json.count; i++) { //cityName=[[NSMutableArray alloc] initWithCapacity:json.count]; ids = [[json objectAtIndex:i] objectForKey:@"id"]; cityName = [[json objectAtIndex:i] objectForKey:@"cityName"]; townName=[[json objectAtIndex:i] objectForKey:@"townName"]; taxis=[[json objectAtIndex:i] objectForKey:@"taxis"]; NSMutableArray *taxisArray=[[NSMutableArray alloc] initWithObjects:taxis,nil]; NSMutableDictionary *towensdict=[[ NSMutableDictionary alloc] initWithObjectsAndKeys:taxisArray,townName, nil]; NSMutableDictionary *cities1=[[NSMutableDictionary alloc] initWithObjectsAndKeys:towensdict,cityName, nil]; NSLOG (@"%@", cities1) here, gives me the print out above [dictArray addEntriesFromDictionary:cities1 ]; Then I tried Jdodgers solution as follows; NSMutableDictionary *combinedDictionary = [[NSMutableDictionary alloc] init]; for (NSDictionary *currentDictionary in dictArray) { NSArray *keys = [currentDictionary allKeys]; for (int n=0;n<[keys count];n++) { NSMutableDictionary *dictionaryToAdd = [combinedDictionary valueForKey:[keys objectAtIndex:n]]; if (!dictionaryToAdd) dictionaryToAdd = [[NSMutableDictionary alloc] init]; [dictionaryToAdd setValuesForKeysWithDictionary:[currentDictionary valueForKey:[keys objectAtIndex:n]]]; [combinedDictionary setValue:dictionaryToAdd forKey:[keys objectAtIndex:n]]; NSLog(@"%@", currentDictionary); } } 

/ /这给错误“无法识别的select器发送到实例”,这里是打印出来

 combinedDictionary NSMutableDictionary * 0x000000010012e580 currentDictionary NSDictionary *const 0x0000000100116460 dictArray NSMutableDictionary * 0x000000010012e220 [0] key/value pair key id 0x0000000100116460 [0] id value id 0x000000010012e440 [0] id keys NSArray * 0x0000000000000000 

你可以创build一个NSMutableDictionary并循环你的数组,使用allKeys将这个键添加到可变字典中。

例如,如果你的数组被称为dictArray ,你可以这样做:

 NSMutableDictionary *combinedDictionary = [[NSMutableDictionary alloc] init]; for (NSDictionary *currentDictionary in dictArray) { NSArray *keys = [currentDictionary allKeys]; for (int n=0;n<[keys count];n++) { NSMutableDictionary *dictionaryToAdd = [combinedDictionary valueForKey:[keys objectAtIndex:n]]; if (!dictionaryToAdd) dictionaryToAdd = [[NSMutableDictionary alloc] init]; [dictionaryToAdd setValuesForKeysWithDictionary:[currentDictionary valueForKey:[keys objectAtIndex:n]]]; [combinedDictionary setValue:dictionaryToAdd forKey:[keys objectAtIndex:n]]; } } 

这个代码首先创build一个字典combinedDictionary ,这将是你的最终字典。 它遍历数组中的所有字典,并为每个字典执行以下操作:

首先,它获取字典中所有键的数组。 对于你提供的这个数组的字典,其前两个看起来像@[@"Bath"] ,另外两个则是@[@"Birmingam"]

然后代码通过这些键循环,并从该键的组合字典中获取已经存在的字典。 如果字典不存在,则创build一个。

然后,它会从数组中添加字典中的所有值,并将新字典设置为combinedDictionary字典。