我正在尝试对数组进行排序,但似乎无法可靠地运行。
以下是排序代码。基本上,Request priorityID的值为1-5 例如:
sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSLog(@"Value A: %@", [NSNumber numberWithInteger:[(Request*)a priorityID]]);
NSLog(@"Value B %@", [NSNumber numberWithInteger:[(Request*)b priorityID]]);
NSNumber *first = [NSNumber numberWithInt:[(Request*)a priorityID]];
NSNumber *second = [NSNumber numberWithInt:[(Request*)b priorityID]];
return [first compare:second];
}];
self.sortedReqArray = [NSMutableArray arrayWithArray:sortedArray];
有时它正确地排序1-5,但有时它排序1 2 4 5 3 ......
然后,当我去看看NSLog时,当它们应该是1-5时,它会吐出非常大的值。
这是示例输出
Value B 168492640
Value A: 168492640
Value B 168492640
Value A: 174580912
Value B 168492640
Value A: 174580912
Value B 168492640
Value A: 174580912
Value B 168492640
Value A: 174580912
Value B 168492640
Value A: 174580912
发生了什么事?谢谢!
答案 0 :(得分:3)
从调试器显示[(Request*)a priorityID]
似乎是NSNumber
,但是
您将其视为整数(因此您实际上是在比较对象的地址)。
以下内容应该有效:
sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
NSNumber *first = [(Request*)a priorityID];
NSNumber *second = [(Request*)b priorityID];
return [first compare:second];
}];
写这个可能稍微更优雅的方式是
sortedArray = [self.selectedReqArray sortedArrayUsingComparator:^NSComparisonResult(Request* a, Request* b) {
NSNumber *first = [a priorityID];
NSNumber *second = [b priorityID];
return [first compare:second];
}];
如果Request
类符合键priorityID
的键值编码,则为。{
以下也应该有效:
NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"priorityID" ascending:YES];
sortedArray = [self.selectedReqArray sortedArrayUsingDescriptors:@[sort]];