我一直在阅读一些使用sortUsingSelector方法对字符串对象进行排序的不同程序,我无法弄清楚它们是如何做到的。
每个程序首先定义排序方法如下:
[myBook sort]; /**myBook is the name of the array in the addressBook class**/
-(void) sort
{
[book sortUsingSelector: @selector (compareNames:)];
}
/**compareNames is defined in the addressCard class**/
sort方法使用一个似乎完成所有工作的选择器方法:
-(NSComparisonResult) compareNames: (AddressCard *) element
{
return [name compare: element.name];
}
重要的是要注意有两个不同的类:addressCard和addressBook。
我知道compare方法将NSOrderedAscending,NSOrderedSame或NSOrderedDescending返回给sortUsingSelector方法。但是,这些方法如何排序一切?我觉得我错过了一些巨大的东西。例如,compare方法如何知道要比较的数组中的哪些元素?我想数组的元素[0]与元素[1]进行比较然后排序然后比较下一个元素...比较方法是否有我忽略的默认定义?
答案 0 :(得分:1)
compare:
方法(或您用作sortUsingSelector:
中参数的任何方法)只有一个作业:只给出两个对象(一对),告诉我如何订购它们。就是这样。
它知道如何执行此操作,因为它是由发送给它的类定义的。在这种情况下,name
是一个NSString,因此我们使用NSString的compare:
方法定义 - 一个知道如何排序字符串的定义(使用有关字母顺序的规则)。
sortUsingSelector:
方法实际上将compare:
方法对交给呃比较。它如何选择这些对是它的业务。你不会被告知如何挑选这些对。决定选择哪些对以及以何种顺序进行深入的业务;它是您的计算机科学101课程的主题。但在这种情况下,你会故意屏蔽这些细节。