我在 NSArray 中有一个 NSString,我想根据它的重要性来排序这个字符串/字段。所以说字符串是B,H,A,Q,Z,L,M,O。
我希望它始终按 A、Q、Z、B、H、O、L、M 排序。这是一组预定义的规则。我该怎么做呢?这可以使用 NSSortDescriptor 完成吗?
我在 NSArray 中有一个 NSString,我想根据它的重要性来排序这个字符串/字段。所以说字符串是B,H,A,Q,Z,L,M,O。
我希望它始终按 A、Q、Z、B、H、O、L、M 排序。这是一组预定义的规则。我该怎么做呢?这可以使用 NSSortDescriptor 完成吗?
简短的回答: 是的!
这就是如何...
由于您需要了解有关您的值的两条信息(重要性和值本身),因此您应该使用这两条重要信息创建一个对象,然后将其存储在一个类似于存储字符串的方式的数组中。如果您想在一段时间后轻松更改“重要性”,这将变得很简单:
@interface MyObject : NSObject
@property (nonatomic, readwrite) NSInteger sortOrder;
@property (nonatomic, retain) NSString *value;
@end
@implementation MyObject
@synthesize sortOrder;
@synthesize value;
-(NSString *)description
{
//...so I can see the values in console should I NSLog() it
return [NSString stringWithFormat:@"sortOrder=%i, value=%@", self.sortOrder, self.value];
}
-(void)dealloc
{
self.value = nil;
[super dealloc];
}
@end
将您的对象添加到数组中。然后排序:
NSMutableArray *myArrayOfObjects = [NSMutableArray array];
//Add your objects
MyObject *obj = [[[MyObject alloc] init] autorelease];
obj.sortOrder = 1;
obj.value = @"A";
[myArrayOfObjects addObject:obj];
obj = [[[MyObject alloc] init] autorelease];
obj.sortOrder = 2;
obj.value = @"Q";
[myArrayOfObjects addObject:obj];
//Sort the objects according to importance (sortOrder in this case)
NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"sortOrder" ascending:YES] autorelease];
NSArray *sortedArray = [myArrayOfObjects sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
NSLog(sortedArray); //<--See for yourself that they are sorted
NSArray 有几个排序函数。您可能会考虑的三个是:
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context
我想你可能会发现第二个基于选择器的比较器最容易上手。请参阅此处的文档:
编辑:
我认为使用 NSSortDescriptor 可能有点矫枉过正,但这里有一篇描述它的好帖子: