我有一个对象数组,需要按照评分和后面的票数进行排序(这样如果两个5星评级的元素比较,票数最多的那个应该是第一个)设置多个排序描述符
是否有可能通过两个描述符对NSArray进行排序:首先在评级之后,然后在票数之后进行计数?
像sortUsingDescriptors:
找到,但我不能在任何地方文档找到它,认为它过时。
我有一个对象数组,需要按照评分和后面的票数进行排序(这样如果两个5星评级的元素比较,票数最多的那个应该是第一个)设置多个排序描述符
是否有可能通过两个描述符对NSArray进行排序:首先在评级之后,然后在票数之后进行计数?
像sortUsingDescriptors:
找到,但我不能在任何地方文档找到它,认为它过时。
是,您可以:
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;
你基本上是对的。在NSArray的存在
- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors
方法。这将返回一个新的数组,根据各种描述符进行排序。
- (void)sortUsingDescriptors:(NSArray *)sortDescriptors
确实存在,但在的NSMutableArray,这或许可以解释为什么你不能为NSArray的文档中找到它。它实现了相同的目标,但对您调用的数组进行排序,而不是返回一个新的数组。两者都不被弃用。
使用- (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;
干杯!
这里是一行代码。
NSArray *sortedArray = [unsortedArray sortUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor [email protected]"rating" ascending:NO], [NSSortDescriptor [email protected]"date" ascending:NO], nil]];
如果你有一个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]];
您的代码将无法编译,你都渗出sortRating和sortDate – rckoenes
仍然不会编译。它不会编译的原因是因为你重新定义了变量名称sortRate和sortDate。你也发布了一个名为'sortDescriptor'的对象,它没有被定义,你不会释放'sortRating'和'sortDate'。 – rckoenes