NSDictionary 到多维数组 ios?
NSDictionary to Multidimensional Array ios?
我有一个 NSDictionary,其值类似于
@{@"key1":@[@"value",@"value",@"value"],@"key2":@[@"value",@"value"],@"key3":@[@"value",@"value",@"value",@"value"]}
然后我使用以下方法将此字典转换为数组
+(NSMutableArray *)getTableNameandColumnValues{
NSMutableArray *uploadTableArrray =[NSMutableArray new];
uploadMasterTableDataDictionary = uploadMasterValues;
NSArray *keys = [[uploadMasterTableDataDictionary allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];;
for(id key in keys) {
id value = [uploadMasterTableDataDictionary objectForKey: key];
[uploadTableArrray addObject:key];
[uploadTableArrray addObject:value];
}
NSLog(@"uploadTableArrray %@",uploadTableArrray);
return uploadTableArrray;
}
它的return数组像
( key1,
(
value,
value,
value,
value
),key2,
(
value,
value,
),key3,
(
value,
value,
value
))
但我需要一个像
这样的数组
( (key1,
"value,value,value,value"
),(key2,
"value,value"
),(key3,
"value,value,value"))
我怎么会变成这样
应该这样做:
for(id key in keys) {
NSArray *value = uploadMasterTableDataDictionary[key];
NSMutableArray *subArray = [NSMutableArray new];
[subArray addObject:key];
[subArray addObjectsFromArray:value];
[uploadTableArrray addObject:subArray];
}
正如@NSNoob 所指出的,您可能希望该值是单个逗号分隔的字符串。如果是这样,请改用它:
for(id key in keys) {
NSArray *value = uploadMasterTableDataDictionary[key];
[uploadTableArrray addObject:@[key, [value componentsJoinedByString:@","]]];
}
问题是针对键的值已经是一个数组。当您将它添加到 uploadTableArrray
时,它将有两个对象。第一个是数组,第二个是键。所以按照你的逻辑输出是正确的。
但是要满足您的要求,您必须这样更改它:
for(id key in keys) {
NSMutableArray *value = [[NSMutableArray alloc] initWithArray:[uploadMasterTableDataDictionary objectForKey: key]];
//[uploadTableArrray addObject:key]; Remove this line
//[uploadTableArrray addObject:value]; and This one should go as well
NSMutableArray *valueArr = [[NSMutableArray alloc] init];
[valueArr addObject:key];
[valueArr addobjectsFromArray:value];
[uploadTableArrray addObject:valueArr];
}
但现在再次查看您的问题,我认为您希望通过组合该数组中的所有对象来将值数组显示为一个字符串。为此你必须使用这个:
for(id key in keys) {
NSMutableArray *value = [[NSMutableArray alloc] initWithArray:[uploadMasterTableDataDictionary objectForKey: key]];
NSString *valueCombinedString = @"";
if(value.count>0)
{
valueCombinedString = [[value valueForKey:@"description"] componentsJoinedByString:@","];
}
//[uploadTableArrray addObject:key]; Remove this line
//[uploadTableArrray addObject:value]; and This one should go as well
NSMutableArray *valueArr = [[NSMutableArray alloc] init];
[valueArr addObject:key];
[valueArr addobject:valueCombinedString];//valueCombinedString will now contain all the values in the array as one string
[uploadTableArrray addObject:valueArr]; //valueArr will now have only two strings. One will be the key and second will be the valueCombinedString
}
按如下所述替换 for 循环:
for(id key in keys) {
id value = [dict objectForKey: key];
NSMutableArray *array = [NSMutableArray array];
[array addObject:key];
[array addObjectsFromArray:value];
[uploadTableArrray addObject:array];
}
希望对您有所帮助!
我有一个 NSDictionary,其值类似于
@{@"key1":@[@"value",@"value",@"value"],@"key2":@[@"value",@"value"],@"key3":@[@"value",@"value",@"value",@"value"]}
然后我使用以下方法将此字典转换为数组
+(NSMutableArray *)getTableNameandColumnValues{
NSMutableArray *uploadTableArrray =[NSMutableArray new];
uploadMasterTableDataDictionary = uploadMasterValues;
NSArray *keys = [[uploadMasterTableDataDictionary allKeys] sortedArrayUsingSelector: @selector(caseInsensitiveCompare:)];;
for(id key in keys) {
id value = [uploadMasterTableDataDictionary objectForKey: key];
[uploadTableArrray addObject:key];
[uploadTableArrray addObject:value];
}
NSLog(@"uploadTableArrray %@",uploadTableArrray);
return uploadTableArrray;
}
它的return数组像
( key1,
(
value,
value,
value,
value
),key2,
(
value,
value,
),key3,
(
value,
value,
value
))
但我需要一个像
这样的数组( (key1,
"value,value,value,value"
),(key2,
"value,value"
),(key3,
"value,value,value"))
我怎么会变成这样
应该这样做:
for(id key in keys) {
NSArray *value = uploadMasterTableDataDictionary[key];
NSMutableArray *subArray = [NSMutableArray new];
[subArray addObject:key];
[subArray addObjectsFromArray:value];
[uploadTableArrray addObject:subArray];
}
正如@NSNoob 所指出的,您可能希望该值是单个逗号分隔的字符串。如果是这样,请改用它:
for(id key in keys) {
NSArray *value = uploadMasterTableDataDictionary[key];
[uploadTableArrray addObject:@[key, [value componentsJoinedByString:@","]]];
}
问题是针对键的值已经是一个数组。当您将它添加到 uploadTableArrray
时,它将有两个对象。第一个是数组,第二个是键。所以按照你的逻辑输出是正确的。
但是要满足您的要求,您必须这样更改它:
for(id key in keys) {
NSMutableArray *value = [[NSMutableArray alloc] initWithArray:[uploadMasterTableDataDictionary objectForKey: key]];
//[uploadTableArrray addObject:key]; Remove this line
//[uploadTableArrray addObject:value]; and This one should go as well
NSMutableArray *valueArr = [[NSMutableArray alloc] init];
[valueArr addObject:key];
[valueArr addobjectsFromArray:value];
[uploadTableArrray addObject:valueArr];
}
但现在再次查看您的问题,我认为您希望通过组合该数组中的所有对象来将值数组显示为一个字符串。为此你必须使用这个:
for(id key in keys) {
NSMutableArray *value = [[NSMutableArray alloc] initWithArray:[uploadMasterTableDataDictionary objectForKey: key]];
NSString *valueCombinedString = @"";
if(value.count>0)
{
valueCombinedString = [[value valueForKey:@"description"] componentsJoinedByString:@","];
}
//[uploadTableArrray addObject:key]; Remove this line
//[uploadTableArrray addObject:value]; and This one should go as well
NSMutableArray *valueArr = [[NSMutableArray alloc] init];
[valueArr addObject:key];
[valueArr addobject:valueCombinedString];//valueCombinedString will now contain all the values in the array as one string
[uploadTableArrray addObject:valueArr]; //valueArr will now have only two strings. One will be the key and second will be the valueCombinedString
}
按如下所述替换 for 循环:
for(id key in keys) {
id value = [dict objectForKey: key];
NSMutableArray *array = [NSMutableArray array];
[array addObject:key];
[array addObjectsFromArray:value];
[uploadTableArrray addObject:array];
}
希望对您有所帮助!