0

У меня есть два NSArray. Это myArray & alphabets. myArray имеют некоторую ценность и alphabets имеют список всех алфавитов.Добавить значение и ключ в NSDictionary из NSMutableArray

У меня также есть NSMutableDictionary, который называется finalDic. Где я хочу добавить myArray значений по первому последнему, где первым последним будет его ключ. Для этого я добавляю дополнительный NSMutableArray под названием objArray. Ниже мой код.

myArray = [[NSArray alloc] initWithObjects: 
       @"Bangladesh", 
       @"France", 
       @"Italy", 
       @"Canada", 
       @"Austria", 
       @"Germany", 
       @"Bolivia", 
       @"Argentina", 
       @"England", nil]; 

NSArray *alphabets = [[NSArray alloc] initWithObjects:@"A", @"B", @"C", @"D", @"E", @"F", @"G", @"H", @"I", @"J", @"K", @"L", @"M", @"N", @"O", @"P", @"Q", @"R", @"S", @"T", @"U", @"V", @"W", @"X", @"Y", @"Z", nil]; 

    NSMutableDictionary *finalDic = [[NSMutableDictionary alloc] init]; 
    NSMutableArray *objArray = [[NSMutableArray alloc] init]; 
    int i; 
    int k; 

    for (i = 0; i < [alphabets count]; i++) 
    { 
     NSString *alp = [alphabets objectAtIndex:i]; 
     for (k = 0; k < [myArray count]; k++) 
     { 
      NSString *vlu = [myArray objectAtIndex:k]; 
      if([[myArray objectAtIndex:k] hasPrefix:[alphabets objectAtIndex:i]]) 
      { 
       [objArray addObject:[myArray objectAtIndex:k]]; 
      } 
     } 

     if (objArray != nil) 
     { 
      [finalDic setObject:objArray forKey:[alphabets objectAtIndex:i]]; 
      [objArray removeAllObjects]; 
     } 
    } 
NSLog(@"finalDic %@", finalDic); 

Проблема в том, что я не получаю точный результат. Я получаю это NSLog:

finalDic { 
A =  (
); 
B =  (
); 
C =  (
); 
D =  (
); 
E =  (
); 
F =  (
); 
G =  (
); 
H =  (
); 
I =  (
); 
J =  (
); 
K =  (
); 
L =  (
); 
M =  (
); 
N =  (
); 
O =  (
); 
P =  (
); 
Q =  (
); 
R =  (
); 
S =  (
); 
T =  (
); 
U =  (
); 
V =  (
); 
W =  (
); 
X =  (
); 
Y =  (
); 
Z =  (
); 
} 

отлаживать код и видел, что после добавления первого key и это значение (которое является objArray) первым key и value становятся пустым !, только перед началом 2-го for loop для B. Не знаете, почему? Я что-то упускаю?

Ответьте, если вы понимаете мою проблему. Большое спасибо заранее.

+1

Выполняется '[objArray removeAllObjects];' каждая итерация цикла. Какой еще результат вы ожидаете? Ваша ошибка повторного использования 'objArray'. – Avi

+0

Спасибо, что комментировали. Я использовал его, потому что в противном случае он добавит все значения для каждого отдельного ключа. Поэтому я хочу сделать его пустым. Я также использовал objArray = nill; Но это не работает. Есть ли у вас какие-либо предложения по этому поводу? – Tulon

+0

Я уже говорил вам: вы повторно используете objArray'. Не делай этого. – Avi

ответ

1

если вы пройдете через него, вы увидите, что ваш finalDic хорош до [objArray removeAllObjects];

FinalDic указывает на objArray. Вам нужно написать создать временный объект или написать его по-другому.