gpt4 book ai didi

iphone - Ios NSDictionary 数组 - 分组值和键

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:12 24 4
gpt4 key购买 nike

我有以下数组的 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);
}
}

//这给出错误“无法识别的选择器发送到实例”,这是打印输出

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

最佳答案

您可以创建一个 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]];
}
}

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

首先,它获取字典中所有键的数组。对于您提供的字典,前 3 个数组看起来像 @[@"Bath"],其他两个看起来像 @[@"Birmingam"]

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

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

关于iphone - Ios NSDictionary 数组 - 分组值和键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18799137/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com