0

sortUsingSelector メソッドを使用して配列を文字列オブジェクトでソートするいくつかの異なるプログラムを読んでいますが、それらがどのように行うのかわかりません。

各プログラムは、次のように sort メソッドを定義することから始めます。

[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 という 2 つの異なるクラスがあることに注意してください。

compare メソッドが NSOrderedAscending、NSOrderedSame、または NSOrderedDescending を sortUsingSelector メソッドに返すことはわかっています。しかし、これらのメソッドはどのようにしてすべてをソートするのでしょうか? 何か大きなものを失った気がします。たとえば、compare メソッドは配列内のどの要素を比較するかをどのように判断するのでしょうか? 配列の要素 [0] が要素 [1] と比較され、並べ替えが行われ、次の要素が比較されると想像します...比較メソッドには、私が見落としているデフォルトの定義がありますか?

4

1 に答える 1

1

compare:メソッド (または でパラメーターとして使用する任意のメソッドsortUsingSelector:) の役割は 1 つだけです: 正確に 2 つのオブジェクト (ペア) が与えられた場合、それらを順序付ける方法を教えてください。それだけです。

送信先のクラスによって定義されているため、これを行う方法を知っています。この場合、nameは NSString であるため、メソッドの NSString の定義を使用します。これは、compare:文字列の順序付け方法を (アルファベット順に関する規則を使用して) 知っている定義です。

メソッドのペアをsortUsingSelector:実際に渡して比較するのはメソッドです。compare:そして、それらのペアをどのように選択するかは、そのビジネスです。それらのペアをどのように選択するかは知らされていません。どのペアをどの順序で選択するかを決定することは、深いビジネスです。これは、コンピューター サイエンス 101 クラスの科目です。しかし、この状況では、それらの詳細から意図的に保護されています。

于 2013-10-11T03:38:14.107 に答える