利用 NSSortDescriptor 对数组排序

有时我们在NSMutableArray中存的是网络请求返回的数据,而每一个元素又是一个NSDictionary,如果这时候需要把数组中的元素按照每个元素字典中某一个key来排序,那么我们可以利用OC中的类:NSSortDescriptor来快速实现需求。这个是oc官方的排序方法,使用起来非常方便

以下就通过一个栗子来演示以下,可直接拷贝代码到项目里面运行

   //通过对可变数组里面的字典的某个key值进行排序 
   NSMutableArray *dicArray = [NSMutableArray array];
    
    for (int i = 0; i<5; i++) {
        
        NSInteger x = arc4random() % 100;
        [dicArray addObject:@{@"num":[NSNumber numberWithInteger:x]}];
        
    }
    
    for (NSDictionary *dic in dicArray) {
        
        NSLog(@"未排序之前>>>>>>%@",dic[@"num"]);
        
    }
    
    
    NSSortDescriptor *distanceDescriptor = [[NSSortDescriptor alloc] initWithKey:@"num" ascending:YES];
    
    NSArray *descriptors = [NSArray arrayWithObjects:distanceDescriptor,nil];
    
    [dicArray sortUsingDescriptors:descriptors];
    
    for (NSDictionary *dict in dicArray) {
        
        NSLog(@"排序后>>>>>>%@",dict[@"num"]);
    }
利用 NSSortDescriptor 对数组排序_第1张图片
log1

除了对number数据类型进行排序之外,如果数组对象是NSString类型的,也就是对字符串数组进行排序,那么就更简单了,sortDescriptorWithKey直接指定为nil就搞定了。

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];
NSArray *descriptors = [NSArray arrayWithObject:descriptor];
NSArray *myDataArray = [NSArray arrayWithObjects:@"what", @"xero", @"highligth", @"mountain", @"Victory", @"Balance", nil];
NSArray *resultArray = [myDataArray sortedArrayUsingDescriptors:descriptors];
NSLog(@"%@", resultArray);
利用 NSSortDescriptor 对数组排序_第2张图片
log2

这里需要注意一下:

NSArray 使用sortedArrayUsingDescriptors,返回排序好的数组;

NSMutableArray可以直接使用sortUsingDescriptors,对数组本身排序。

这里我们不难发现sortedArrayUsingDescriptors和sortUsingDescriptors这两个方法都是需要传一个Descriptors数组的,也就是说可以使用多个排序参数,非常好用!

再举个栗子,比如说User有一个属性叫做image,而image又有个属性叫timestamp,如果要根据User的image关系的timestamp排序,那么NSSortDescriptor传的key值应该是@“image.timestamp”

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"image.timestamp" ascending:YES]; 

[userArray sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]]; 

你可能感兴趣的:(利用 NSSortDescriptor 对数组排序)