繁体   English   中英

设置多个排序描述符

[英]setting multiple sort descriptors

我有一系列的对象,需要按照评级对其进行排序,然后根据后面的投票数量进行排序(如果两个5星评级元素比较,那么投票最多的那个应该是第一个)

是否有可能通过两个描述符对NSArray进行排序:首先是评级之后,然后是在计票之后?

我在http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSSortDescriptor_Class/Reference/Reference.html上找到了

sortUsingDescriptors:这样的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 *sortedArray = [unsortedArray sortUsingDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey@"rating" ascending:NO], [NSSortDescriptor sortDescriptorWithKey@"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]];

使用- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors 这是文档: NSArray 类参考

例如:

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;

干杯!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM