1

当这本书开始讨论使用sortandcompareNames:方法对数组中的元素进行字母排序时,我有些困惑。compareNames调用方法时如何获取参数sort?当所有返回的都是 类型时,元素实际上是如何按字母顺序排列的NSComparisonResult

#import <Foundation/Foundation.h>

@interface AddressCard : NSObject
@property (copy, nonatomic) NSString *name, *email;

-(NSComparisonResult) compareNames: (id) element;

@end

@implementation AddressCard 
@synthesize name, email;

-(NSComparisonResult) compareNames:(id)element {
    return [name compare: [element name]];
}
@end

#import "AddressCard.h"
#import <Foundation/Foundation.h>

@interface AddressBook : NSObject
@property (nonatomic, copy) NSString *bookName;
@property (nonatomic, strong) NSMutableArray *book;

-(void) addCard: (AddressCard *) myCard;
-(void) sort;

@end

@implementation AddressBook
@synthesize book, bookName;

-(void) sort {
    [book sortUsingSelector: @selector(compareNames:)];
}
4

2 回答 2

1

ANSComparisonResult只是NSOrderedAscending, NSOrderedSame, 中的一个NSOrderedDescending

该方法compareNames负责真正的比较。在这种情况下,由于您正在比较字符串,因此该方法仅依赖于已实现compareNSString. 结果根据字母顺序提供有关两个字符串之间比较的信息。

方法sortUsingSelectorNSMutableArray对自定义类型的数据进行排序的有用方法(如果您尝试根据自定义条件对自定义对象进行排序,您会更好地理解)。它接受一个选择器,这意味着每次需要比较两个对象时,都会调用选择器指定的方法。

我记得你不允许知道sortUsingSelector内部使用的方法(快速排序/堆排序/冒泡排序......),你需要知道的是对象是使用你传递的方法的实现指定的标准排序的与选择器。

于 2012-08-01T01:31:15.857 回答
1

compareNames:排序方法 ( sortUsingSelector:) 对需要比较的每一对元素重复调用该方法;它提供论据。确切地比较哪些元素对来对数组进行排序取决于排序算法。Apple 文档没有提及使用哪种方法,但QuickSort是一种相当常见的方法。如果您查看 Wikipedia 页面,您应该能够看到如何通过重复比较成对的项目来最终得到完整的排序数组。

于 2012-08-01T01:34:03.737 回答