我有一个NSMutable对象数组。这些对象代表足球(足球)比赛,并且有一个名为NSString
的{{1}}参数(编辑为“Arsenal v Chelsea”),以及一个名为title
的{{1}}参数。
我正在使用以下代码按日期对数组进行排序:
NSDate
显然,有多个游戏在同一天发生。我想按字母顺序对同一天发生的游戏进行排序。有一种简单的方法可以做到这一点吗?
答案 0 :(得分:5)
方法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];
答案 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:
的数组中,但我认为它的可读性较差。