我有一個對象數組,需要按照評分和後面的票數進行排序(這樣如果兩個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