2013-12-01 9 views
0

У меня есть NSArray, состоящий из других NSArrays. Ниже приведена структура.NSArray в NSMutableDictionary

array (
    subArray1 (
     type_1_item1, 
     type_2_item2, 
     type_3_item3 
    ), 
    subArray2 (
     type_1_item4, 
     type_2_item5, 
     type_3_item6 
    ), 
    subArray3 (
     type_1_item7, 
     type_2_item8, 
     type_3_item9 
    ) 
) 

Я хочу изменить структуру, поэтому она представляет собой массив, состоящий из словарей; поэтому структура будет такой.

array (
    dictionary1 { 
     type_1 : item1, 
     type_2 : item4, 
     type_3 : item7 
    }, 
    dictionary2 { 
     type_1 : item2, 
     type_2 : item5, 
     type_3 : item8 
    }, 
    dictionary3 { 
     type_1 : item3, 
     type_2 : item6, 
     type_3 : item9 
    } 

Это то, что я пробовал до сих пор.

for (int i = 0; i < array.count; i++) { 

     for (int j = 0; j < [[array objectAtIndex:i] count]; j++) { 

      NSMutableDictionary *tempDictionary = [[NSMutableDictionary alloc]init]; 

      if (i == 0) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_1"]; 
      } 
      else if (i == 1) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_2"]; 
      } 
      else if (i == 2) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_3"]; 
       } 
      else if (i == 3) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_4"]; 
      } 
      else if (i == 4) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_5"]; 
      } 
      else if (i == 5) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_6"]; 
      } 
      else if (i == 6) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_7"]; 
      } 
      else if (i == 7) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_8"]; 
      } 
      else if (i == 8) { 
       [tempDictionary setObject:[[array objectAtIndex:i] objectAtIndex:j] forKey:@"type_9"]; 
      } 

      [storage addObject:tempDictionary]; 
     } 
    } 

И это то, что печатает:

{ 
    type_1 = item1; 
}, 
    { 
    type_1 = item4; 
}, 
    { 
    type_1 = item7; 
}, 
    { 
    type_2 = item2; 
}, 
    { 
    type_2 = item5; 
}, 
    { 
    type_2 = item8; 
}, 
    { 
    type_3 = item3; 
}, 
    { 
    type_3 = item6; 
} 
    { 
    type_3 = item9; 
} 

)

+1

Вам нужно показать, что вы пробовали, и объяснить, что он делает неправильно. – Wain

+0

Прости, я сделаю это сейчас. – Will

+0

Ваша цель - просто сгенерировать новую структуру с нуля или преобразовать существующий массив в исходную структуру в новую структуру? – rmaddy

ответ

2
for (NSArray *subArray in array) { 
    NSMutableDictionary *dict = [NSMutableDictionary dictionary]; 
    int counter = 1; 
    for (id item in subArray) { 
     [dict setObject:item forKey: 
      [NSString stringWithFormat:@"type_%d", counter++]]; 
    } 
    [newArray addObject:dict]; 
} 
-1

Петля через массив со счетчиком и установить каждый элемент с ключом из счетчика. [@ (счетчик) stringValue], например

+0

Не могли бы вы привести пример? – Will

+0

Нет необходимости, в других ответах уже есть хорошие экзамены. Спасибо, что вернули правильный ответ. –

+0

У меня пока нет достаточной репутации для downvote. Не будьте больным проигравшим. – Will

0
NSMutableArray *newBigArray = [[NSMutableArray alloc] initWithCapacity:originalBigArray.count]; 
for (NSArray *originalSmallArray in originalBigArray) 
{ 
    NSMutableDictionary *newSmallDictionary = [[NSMutableDictionary alloc] initWithCapacity:originalBigArray.count]; 
    for (int x = 0; x < originalSmallArray.count; x++) 
    { 
     NSString *itemName = [NSString stringWithFormat:@"type_%i",x+1]; 
     [newSmallDictionary setObject:[originalSmallArray objectAtIndex:x] forKey:itemName]; 
    } 
    [newBigArray addObject:newSmallDictionary]; 
} 
-2

Ответы, были функциональными, однако они не были то, что нужно.

Код, который дал мне то, что мне нужно, находится ниже.

NSMutableArray *storage = [[NSMutableArray alloc]init]; 


for (int k = 0; k < [[jsonDeviceData objectAtIndex:0] count]; k++) { 

    NSMutableDictionary *dict = [[NSMutableDictionary alloc]init]; 

    for (int i = 0; i < jsonDeviceData.count; i++) { 

     for (int j = 0; j < [[jsonDeviceData objectAtIndex:i] count]; j++) { 

      if (i == 0) { 
       [dict setObject:[[jsonDeviceData objectAtIndex:i]objectAtIndex:k] forKey:@"type1"]; 
      } 
      else if (i == 1) { 
       [dict setObject:[[jsonDeviceData objectAtIndex:i]objectAtIndex:k] forKey:@"type2"]; 
      } 
      else if (i == 2) { 
       [dict setObject:[[jsonDeviceData objectAtIndex:i]objectAtIndex:k] forKey:@"type3"]; 
      } 
     } 
    } 
    [storage addObject:dict]; 
} 
+0

Вам ** действительно ** нужно научиться создавать форматированные строки. – dreamlax

+0

type1, type2 и т. Д. - это просто общие имена, которые я использовал для stackoverflow. На самом деле ключи будут конкретным именем. – Will

+0

Вы также должны использовать современный синтаксис, такой как: 'dict [@" type1 "] = jsonDeviceData [i] [k];'. – rmaddy

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