0

我一直在阅读一些不同的程序,这些程序使用 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] 进行比较,然后进行排序,然后比较下一个元素......比较方法是否有我忽略的默认定义?

4

1 回答 1

1

compare:方法(或您在 中用作参数的任何方法sortUsingSelector:)只有一个工作:给定两个对象(一对),告诉我如何订购它们。这就是它所做的一切。

它知道如何做到这一点,因为它是由它发送到的类定义的。在这种情况下,name是一个 NSString,所以我们使用 NSString 的compare:方法定义 - 一个知道如何对字符串进行排序的定义(使用关于字母顺序的规则)。

sortUsingSelector:方法实际上将compare:方法对交给,呃,比较。它如何选择这些对是它的业务。你不会被告知它是如何挑选这些对的。决定选择什么配对以及以什么顺序是一项深入的业务;它是您的计算机科学 101 课程的主题。但是在这种情况下,你会故意避开这些细节。

于 2013-10-11T03:38:14.107 回答