Редактировать и удалять элементы из массива NSMutable

У меня есть NSMutableArray, данные которого находятся в формате словаря, например:

(
        {
        subject = “Maths";
        rollNo = "#1";
        division = A;
    },
        {
        subject = “Science”;
        rollNo = “#2”;
        division = A;
    },
 {
        subject = “Maths";
        rollNo = “#3”;
        division = A;
    },
 {
        subject = “Maths";
        rollNo = “#4”;
        division = B;
    },
 {
        subject = “Science”;
        rollNo = “#5”;
        division = A;
    },
 {
        subject = “English”;
        rollNo = “#6”;
        division = A;
    },
)

Теперь мне нужно объединить номера рулонов, которые принадлежат к одному и тому же предмету и подразделению, и изменить существующий массив, как показано ниже.

(
        {
        subject = “Maths";
        rollNo = “#1,#3”;
        division = A;
    },
        {
        subject = “Science”;
        rollNo = “#2,#5”;
        division = A;
    },

 {
        subject = “Maths";
        rollNo = “#4”;
        division = B;
    },

 {
        subject = “English”;
        rollNo = “#6”;
        division = A;
    },
)

This is how I'm trying to achieve it

 NSMutableArray *temp =[studentDetailsArray mutableCopy];
 NSMutableArray *elementToDelete = [NSMutableArray array];
 for (int m=0; m<temp.count-1; m++)
 {
 if ([temp[m][@"subject"] isEqualToString:temp[m+1][@"subject"]] && [temp[m][@“division”] isEqualToString:temp[m+1][@“division”]])
 {
 [temp[m] replaceObjectAtIndex:1 withObject:@{@"rollNo":[NSString stringWithFormat:@"%@, %@",temp[m][@"rollNo"],temp[m+1][@"rollNo"]]}];
 //                    [temp[m] setValue:[NSString stringWithFormat:@"%@, %@",temp[m][@"rollNo"],temp[m+1][@"rollNo"]]forKey:@"rollNo"];
 [elementToDelete addObject:temp[m+1]];
 }
 }

 [temp removeObjectsInArray:elementToDelete]; 

Но я получаю сообщение об ошибке при замене объекта, поэтому мне нужно преобразовать его в NSMutableDictionary? Как мне поступить, чтобы сделать это простым способом?


person Francis F    schedule 02.11.2015    source источник
comment
Вам нужно взять объекты в NSMutableDictionary и отредактировать объекты в соответствии с вашими требованиями и после этого. Вы можете сохранить эти объекты обратно в NSMutableArray   -  person Raxit    schedule 02.11.2015


Ответы (1)


Не нужно создавать больше массива. Вы получили ошибку, потому что эта строка:

[temp[m] replaceObjectAtIndex:1 withObject:@{@"rollNo":[NSString stringWithFormat:@"%@, %@",temp[m][@"rollNo"],temp[m+1][@"rollNo"]]}];

Так должно быть

NSMutableDictionary *mutable = [temp[m] mutableCopy];

[mutable setObject:[NSString stringWithFormat:@"%@, %@",temp[m][@"rollNo"],temp[m+1][@"rollNo"]] forKey:@"rollNo"];
[temp replaceObjectAtIndex:m withObject:mutable];
person tuledev    schedule 02.11.2015
comment
Спасибо за ваш ответ, согласно вашему ответу, это полностью заменит объект этим объектом, т. Е. Массив будет заменен, как [roll no: # 1, # 2]. Значения ключей темы и раздела будут потеряны, нужно ли заново создавать весь объект и заменять его? - person Francis F; 02.11.2015
comment
@Gamerlegend. Извините, моя вина. Я обновил свой ответ. Спасибо. - person tuledev; 02.11.2015
comment
Ключ rollNo нужно добавлять только один раз, [изменяемый setObject:[NSString stringWithFormat:@%@, %@,temp[m][@rollNo],temp[m+1][@rollNo]] forKey:@rollNo]; Спасибо за вашу помощь - person Francis F; 02.11.2015
comment
@Gamerlegend Спасибо, что поправили меня. Я отредактировал свой ответ. - person tuledev; 02.11.2015