2016-03-02 3 views
1

У меня есть NSDictionary со значениями какNSDictionary для многомерного массива ios?

@{@"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; 
} 

его возвращение в массив как

(key1, 
    (
    value, 
    value, 
    value, 
    value 

),key2, 
    (
    value, 
    value, 

    ),key3, 
    (
    value, 
    value, 
    value 
    )) 

но мне нужен массив подобные

((key1, 
    "value,value,value,value" 

),(key2, 
    "value,value" 
),(key3, 
    "value,value,value")) 

, как я могу получить как этот

+0

Другими словами, вы хотите, чтобы ключ, встроенный в массив против этого ключа? – NSNoob

ответ

1

Это следует сделать это:

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:@","]]]; 
} 
1

Проблема в том, что значение по отношению к ключу уже является массивом. Когда вы добавите его в 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 

    } 
+0

Я думаю, что вы можете быть правы, однако вы можете значительно сократить этот код, используя '[NSArray componentsSeparatedByString:]'. – trojanfoe

+0

@trojanfoe Я думаю, вы имеете в виду '[NSArray componentsJoinedByString:]'? Спасибо за подсказку, которую я реализовал. – NSNoob

0

Заменить цикл, как указано ниже:

for(id key in keys) { 
    id value = [dict objectForKey: key]; 
    NSMutableArray *array = [NSMutableArray array]; 
    [array addObject:key]; 
    [array addObjectsFromArray:value]; 

    [uploadTableArrray addObject:array]; 
} 

Надеется, что это помогает!

Смежные вопросы