Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 无法使用两个属性的自定义比较器对数组进行排序_Iphone_Ios_Objective C_Macos_Ipad - Fatal编程技术网

Iphone 无法使用两个属性的自定义比较器对数组进行排序

Iphone 无法使用两个属性的自定义比较器对数组进行排序,iphone,ios,objective-c,macos,ipad,Iphone,Ios,Objective C,Macos,Ipad,编辑: 我发现,根本没有问题,我只是用了错误的值来检查结果 我在比较数据库中的自定义对象时遇到了一点困难,我的目标是按照非常特定的顺序对它们进行排序。原则上,这很简单,排序机制必须处理这个自定义对象的两个属性,它们由字符串表示,但也可能包含数值 这是我目前正在尝试修复的自定义比较器块 NSArray *sortedArray = [baseAry sortedArrayUsingComparator:^NSComparisonResult(Obj *o1, Obj *o2) { NSCompar

编辑: 我发现,根本没有问题,我只是用了错误的值来检查结果

我在比较数据库中的自定义对象时遇到了一点困难,我的目标是按照非常特定的顺序对它们进行排序。原则上,这很简单,排序机制必须处理这个自定义对象的两个属性,它们由字符串表示,但也可能包含数值

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

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

是否有一种舒适的方法可以用一段代码来实现这一点?我可以想象的另一种方法是将列表拆分为子列表,并分别对它们进行排序,最后将它们粘在一起,但这可能需要更高的计算能力,您应该首先比较两个对象的属性。如果它们相等,比较两个对象的属性:

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
进行比较,这没有多大意义。)

如果您返回相同的值,那么如果循环检查比较的值相同,那么需要什么?您的问题看起来与此问题类似,您也可以这样做:NSSortDescriptor*firstSorter=[[NSSortDescriptor alloc]initWithKey:@“firstProperty”升序:是];NSSortDescriptor*secondSorter=[[NSSortDescriptor alloc]initWithKey:@“secondProperty”升序:是];NSArray*SortDarray=[array SortDarray UsingDescriptor:@[firstSorter,secondSorter]];因为我还不能回答我自己的问题:我找到了答案。你的两个解决方案(以及我实施的方案)都会奏效,我只是为比较显示了错误的值。感谢大家抽出时间!抱歉,我刚意识到我的代码在开始时有一个错误:它正是您刚才发布的内容。似乎不是这样。我比较attr_a,如果它们相同,我分别比较attr_b和return。