Помогите Сортировка NSArray - PullRequest
0 голосов
/ 01 августа 2010

В моем проекте я пролистываю кучу записей sql и заполняю NSMutableDictionary строкой для каждого ключа. Ключи важны, потому что я использую их как заголовки разделов в моем TableView.

У меня проблема в том, что я хотел бы разделы в определенном порядке. Когда я вызываю allKeys, порядок ключей не совпадает с порядком их перехода в NSMutableDictionary. Я более или менее понимаю, почему. Мой вопрос заключается в том, как сделать так, чтобы определенные значения (не в алфавитном порядке) отображались первыми перед остальными значениями.

Примеры строк: «Синий», «Коричневый», «Зеленый», «Оранжевый», «Фиолетовый», «Красный», «Фиолетовый», «Желтый» ...

Мне бы хотелось, чтобы они были упорядочены следующим образом: «Красный», «Зеленый», «Синий», «Коричневый», «Оранжевый», «Фиолетовый», «Красный», «Фиолетовый»

Важной частью являются «Красный», «Зеленый», «Синий», все остальные значения могут быть в алфавитном порядке после этих 3 значений.

Единственное, о чем я могу думать, это упорядочить их в алфавитном порядке, сказав 'sortedArrayUsingSelector: @selector (compare :)', а затем просто попытаться удалить искомые строки и поместить их обратно с меньшим значением индекса, если они существуют. Есть идеи получше? Я не уверен, насколько это эффективно.

Ответы [ 2 ]

0 голосов
/ 02 августа 2010

Вот метод, который я придумал. Опять же, я не уверен, насколько это эффективно, но это работает для моих целей.

-(NSArray *)rearrangeSections:(NSArray *)s {
    NSArray *topSections = [NSArray arrayWithObjects:@"Red", @"Green", @"Blue", nil];

    NSArray *reversedTopSections = [[topSections reverseObjectEnumerator] allObjects];
    NSArray *alphabetizedArray = [s sortedArrayUsingSelector:@selector(compare:)];
    NSMutableArray *sections = [NSMutableArray arrayWithArray:alphabetizedArray];

    //Loop through our list of sections and place them at the top of the list.
    for (NSString *sectionTitle in reversedTopSections) {
        if ([sections containsObject:sectionTitle]) {
            [sections removeObject:sectionTitle];
            [sections insertObject:sectionTitle atIndex:0];
        }
        //NSLog(@"%@", sections);
    }

    NSArray *sortedSections = [NSArray arrayWithArray:sections];
    return sortedSections;
}
0 голосов
/ 01 августа 2010

Ваш подход кажется нормальным. Использование «фондовых методов» - хороший выбор. Поскольку вы не можете делать предположения о порядке ключей, это путь.

...