我有一个NSArray中的NSString,我想根据它的重要性排序这个字符串/字段。所以说这个字符串是B,H,A,Q,Z,L,M,O.以特定的顺序排序NSArray的NSString
我希望它总是按A,Q,Z,B,H,O,L,M排序。是一组预定义的规则。我该怎么做呢?这可以使用NSSortDescriptor完成吗?
我有一个NSArray中的NSString,我想根据它的重要性排序这个字符串/字段。所以说这个字符串是B,H,A,Q,Z,L,M,O.以特定的顺序排序NSArray的NSString
我希望它总是按A,Q,Z,B,H,O,L,M排序。是一组预定义的规则。我该怎么做呢?这可以使用NSSortDescriptor完成吗?
NSArray有几种排序功能。三,你可能会考虑是:
- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator
- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context
我想你可能会发现第二个,根据选择,比较最容易使用的上手。在这里看到的文档:
编辑:
我认为使用NSSortDescriptor可能是矫枉过正,但这里是一个很好的职位描述它:
How to sort NSMutableArray using sortedArrayUsingDescriptors?
简短的回答:是的!
这里的如何...
由于有两条信息,你需要了解你的价值(重要性和本身的价值),你应该创建这两个信息重要棋子对象,然后以类似于存储字符串的方式存储数组。这使得简单的比如说,如果你想用很少的努力后改变“重要性”一段时间:
@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