Не alloc
и init
g и s в приведенном выше коде, это не является необходимым и вызывает утечку памяти.
Я бы прошел через ваш массив и создал бы второй массив, содержащийсловари.Каждый словарь будет содержать два объекта, одну дату и один массив.Массив будет содержать все значения, применимые к каждой дате.
Используя эту технику, счетчик основного массива будет количеством разделов, а количество строк в разделе - счетчиком массива в словаре.Значением для каждой строки будет объект с соответствующим индексом для раздела (основной массив) и строки (внутренний массив).
Вот немного проверенный код, который может делать то, что вы хотите:
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:@"test.plist"];
[array sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"Date" ascending:YES]]];
NSMutableArray *datesList = [[NSMutableArray alloc] init ];
NSString *previousDate = @"";
NSMutableArray *currentDateValues;
for (NSDictionary * dict in array)
{
if ([[[dict objectForKey:@"Date"] substringToIndex:10] isEqualToString:previousDate])
{
// This is another entry from the same date
[currentDateValues addObject:[dict objectForKey:@"Value"]];
}
else
{
// We haven't seen this date before
previousDate = [[dict objectForKey:@"Date"] substringToIndex:10];
currentDateValues = [NSMutableArray array];
[currentDateValues addObject:[dict objectForKey:@"Value"]];
NSDictionary *newDate = [NSDictionary dictionaryWithObjectsAndKeys:previousDate,@"Date",currentDateValues,@"Values", nil];
[datesList addObject:newDate];
}
}
Это должно оставить вас с одним массивом datesList
, который содержит словарь для каждой даты имассив всех значений для каждой даты.