0

编辑:正如我所想,甚至没有问题,我只是使用错误的值来检查我的结果。

我在比较我的数据库的自定义对象与以非常特定的顺序对它们进行排序的目标时遇到了一点麻烦,原则上,这很容易,排序机制必须使用这个由字符串表示的自定义对象的两个属性,但也可能包含数值。

这是我目前正在尝试修复的自定义比较器块。

NSArray *sortedArray = [baseAry sortedArrayUsingComparator:^NSComparisonResult(Obj *o1, Obj *o2) {
NSComparisonResult comp1 = [o1.attr_a compare:o2.attr_a];
if (comp1 == NSOrderedSame) {
    return [o1.attr_b compare:o2.attr_b];    
}
return [o1.attr_a compare:o2.attr_a]; 
}];

最后,列表应如下所示:

  • 12 - 3
  • 12 - 8
  • 13 - 1
  • 14 - 2
  • 14 - 4
  • 22 - 1 等

但是使用当前的比较器,我只能得到这样的结果:

  • 12 - 8
  • 12 - 3
  • 13 - 1
  • 14 - 4
  • 14 - 2
  • 22 - 3
  • 22 - 2
  • 22 - 1

有没有一种舒适的方法可以用一段代码来做到这一点?我可以想象的另一种方法是将列表拆分为子列表并将它们单独排序并最终将它们粘合在一起,但这可能需要更高的计算能力

4

1 回答 1

0

您应该attr_a首先比较两个对象。如果它们相等,则比较attr_b两个对象:

NSComparisonResult comp = [o1.attr_a compare:o2.attr_a];
if (comp == NSOrderedSame) {
    comp = [o1.attr_b compare:o2.attr_b];    
}
return comp; 

(您的代码将attr_a第一个对象与attr_b第二个对象进行比较,这没有多大意义。)

于 2013-04-02T11:37:23.273 回答