2015-03-16 5 views
1

У меня есть массив объектов NSMutable. Объекты представляют футбольные (футбольные) матчи и имеют параметр NSString под названием title (редактор «Арсенал против Челси») и параметр NSDate под названием .Сортировка NSMutableArray по дате, а затем по алфавиту

Я сортировка массива по дате в данный момент, используя следующий код:

NSMutableArray* a = [self getMatchListFromURL:@"http://www.url.com"]; 
[a sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"ActualDate" ascending:YES]]]; 

Очевидно, есть несколько игр, которые происходят в тот же день. Я хотел бы сортировать игры, которые происходят в тот же день в алфавитном порядке. Есть ли простой способ сделать это?

ответ

3

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

NSSortDescriptor *sortAlphabetical = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES]; 
NSSortDescriptor *sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"ActualDate" ascending:YES]; 
NSArray *sortDescriptors = @[sortAlphabetical, sortByDate]; 
//perform sorting 
[a sortUsingDescriptors:sortDescriptors]; 
+0

Это именно то, что я искал, приветствия. – James

2

Есть несколько способов реализации этого, но я думаю, что наиболее читаемым является реализация блока сравнения, например, так:

[a sortUsingComparator:^NSComparisonResult(SomeClass *obj1, SomeClass *obj2) { 
    NSComparisonResult dateCompare = [obj1.actualDate compare:obj2.actualDate]; 

    if (dateCompare != NSOrderedSame) { 
     return dateCompare; 
    } else { 
     return [obj1.title compare:obj2.title]; 
    } 
}]; 

Это сортирует a первый его свойство actualDate, и если они» то же самое, то по свойству title. Вы можете добавить дополнительную логику, если вам нужно.

Вы также можете добавить дополнительные объекты NSSortDescriptor к массиву, который вы передаете sortUsingDescriptors:, но я думаю, что это менее читаемо.

+0

Спасибо, я не знал, что вы можете настроить эти пользовательские компараторы. Это может быть полезно для другой части приложения, над которым я работаю. – James

+1

Они были бы совершенно очевидны, если бы вы открыли заголовочный файл NSArray или прочитали документацию. Разве вы этого не делаете? – gnasher729

Смежные вопросы