按日期排序NSMutableArray,然后按字母顺序排序

时间:2015-03-16 22:40:52

标签: objective-c sorting

我有一个NSMutable对象数组。这些对象代表足球(足球)比赛,并且有一个名为NSString的{​​{1}}参数(编辑为“Arsenal v Chelsea”),以及一个名为title的{​​{1}}参数。

我正在使用以下代码按日期对数组进行排序:

NSDate

显然,有多个游戏在同一天发生。我想按字母顺序对同一天发生的游戏进行排序。有一种简单的方法可以做到这一点吗?

2 个答案:

答案 0 :(得分:5)

方法sortUsingDescriptorsNSSortDescriptor数组作为参数。因此,您可以将多个排序描述符传递给方法,如下所示:

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

答案 1 :(得分: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:的数组中,但我认为它的可读性较差。