我有一系列的对象,需要按照评级和后面的票数进行排序(如果两个5星评级元素比较,那么投票最多的那个应该是第一个)
是否可以通过两个描述符对NSArray进行排序:首先是评级后,然后是在计票后?
找到了 像sortUsingDescriptors:
这样的东西,但我无法在文档的任何地方找到它,认为它已被弃用。
答案 0 :(得分:30)
是的,你可以:
NSSortDescriptor *sortRating = [[NSSortDescriptor alloc] initWithKey:@"rating" ascending:NO];
NSSortDescriptor *sortVotes = [[NSSortDescriptor alloc] initWithKey:@"votes" ascending:NO];
NSArray *sortedArray = [orignalAray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortRating, sortVotes, nil]];
[sortRating release], sortRating = nil;
[sortVotes release], sortVotes = nil;
答案 1 :(得分:1)
你基本上是对的。在NSArray上有
- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors
方法。这将返回一个新数组,根据各种描述符进行排序。
- (void)sortUsingDescriptors:(NSArray *)sortDescriptors
确实存在,但是在 NSMutableArray 上,这可能解释了为什么在NSArray的文档中找不到它。它实现了相同的目标,但是对您调用它的数组进行排序,而不是返回一个新数组。两者都没有被弃用。
答案 2 :(得分:1)
这是一个单行。
NSArray *sortedArray = [unsortedArray sortUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey@"rating" ascending:NO], [NSSortDescriptor sortDescriptorWithKey@"date" ascending:NO], nil]];
答案 3 :(得分:0)
使用- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors
。以下是文档:NSArray
Class Reference
E.g:
NSSortDescriptor *sortRating = nil;
NSSortDescriptor *sortDate = nil;
NSSortDescriptor *sortRating = [[NSSortDescriptor alloc] initWithKey:@"rating" ascending:NO];
NSSortDescriptor *sortDate = [[NSSortDescriptor alloc] initWithKey:@"date" ascending:NO];
NSArray *sortedArray = [auxArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortRating,sortDate,nil]];
[sortRating release];
sortRating = nil;
[sortDate release];
sortDate = nil;
干杯!
答案 4 :(得分:0)
如果你有一个NSArray使用这个:
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"x_date" ascending:TRUE];
NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] initWithKey:@"x_time" ascending:TRUE];
[tempArray sortUsingDescriptors:[NSArray arrayWithObjects:sortDescriptor,sortDescriptor1, nil]];