2013-02-10 65 views
3

我有一个NSArray中的NSString,我想根据它的重要性排序这个字符串/字段。所以说这个字符串是B,H,A,Q,Z,L,M,O.以特定的顺序排序NSArray的NSString

我希望它总是按A,Q,Z,B,H,O,L,M排序。是一组预定义的规则。我该怎么做呢?这可以使用NSSortDescriptor完成吗?

回答

1

NSArray有几种排序功能。三,你可能会考虑是:

- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr

- (NSArray *)sortedArrayUsingSelector:(SEL)comparator

- (NSArray *)sortedArrayUsingFunction:(NSInteger (*)(id, id, void *))comparator context:(void *)context

我想你可能会发现第二个,根据选择,比较最容易使用的上手。在这里看到的文档:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html#//apple_ref/occ/instm/NSArray/sortedArrayUsingSelector

编辑:

我认为使用NSSortDescriptor可能是矫枉过正,但这里是一个很好的职位描述它:

How to sort NSMutableArray using sortedArrayUsingDescriptors?

2

简短的回答:是的!

这里的如何...

由于有两条信息,你需要了解你的价值(重要性和本身的价值),你应该创建这两个信息重要棋子对象,然后以类似于存储字符串的方式存储数组。这使得简单的比如说,如果你想用很少的努力后改变“重要性”一段时间:

@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