Добавить недостающие объекты для создания упорядоченной коллекции - PullRequest
0 голосов
/ 20 октября 2010

Тема неясна, потому что я не уверен, как сформулировать в одном предложении то, что я хочу.

Вот как:

У меня есть NSArray из NSDictionaries.Каждый NSDictionary представляет один день календарного года.Каждый NSDictionary имеет ключ «date» со значением NSDate.В массиве должно быть 365 элементов NSDictionary.Словарь создается сервером, который я не контролирую, и иногда ему не хватает целых 100 дней.

Мне нужно убедиться, что в массиве 365 словарей, каждый день позже следующего.

В настоящее время я сортирую массив по дате, перебираю его, копируя NSDictionaries из текущего массива в новый массив.При этом я сравниваю значение даты в текущем словаре со значением даты для следующего словаря.Если между двумя датами более одного дня, я добавляю в новый массив достаточно новых словарей, чтобы охватить эти пропущенные дни (и соответственно устанавливаю их даты), а затем продолжаю.

Поскольку даты должны быть упорядочены, мне интересно, если в фреймворке или языке уже не существует механизма, который я мог бы использовать, чтобы сказать: «Вот массив, и этот путь к ключу должен быть последовательным. Найтии создайте элементы, которые отсутствуют, и вот блок или метод, который вы можете использовать для их инициализации ".

Что-то в моем методе просто плохо реализовано, поэтому я обращаюсь к вам.Мысли?

Спасибо.

Ответы [ 3 ]

1 голос
/ 20 октября 2010

То, как вы это сделали, звучит совершенно вменяемым, и, насколько мне известно, нет ничего, что сделает это автоматически в базовой структуре.

0 голосов
/ 20 октября 2010

Вам не нужно делать сортировку:

  1. Создать массив из 365 (или 366) словарей-заполнителей (вы можете использовать один и тот же для всех слотов или использовать NSNull)
  2. переберите переданный массив и определите, для какого дня предназначен каждый из словарей. Поместите каждый словарь в его правильное место в вашем массиве.
0 голосов
/ 20 октября 2010

Этот код отсортирует их.

NSArray *dates;  // wherever you get this...
NSArray *sortedDates = [dates sortedArrayUsingComparator:^(id obj1, id obj2) 
    {
    return [[obj1 valueForKey:@"date"] compare:[obj2 valueForKey:@"date"]];
    }];

Что касается создания недостающих записей, вам придется сделать это самостоятельно.

...