2013-05-15 37 views
0

我想排序我的数组,但它似乎无法可靠地工作。SortedArrayUsingComparator not working accurate

这里是排序的代码。基本请求priorityID具有从1-5 值例如: enter image description here

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

这是怎么回事?谢谢!

回答

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]]; 
+0

哟你是炸弹!是的,解决了这个问题,我修改它的优雅版本。非常感谢! – Alan