iOS-排序

数组里面的(字典 对象)排序和对比 去重复
01.(可变数组)
[self.tableview.dataArray addObjectsFromArray:self.liveCommentList];
            [parray addObjectsFromArray:self.tableview.dataArray];
                      
                   [parray sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
                          ZhiBoJianModel * dicum1 =obj1;
                                  ZhiBoJianModel * dicum2 =obj2;

                                  if (([dicum1.comment isEqualToString:dicum2.comment]==YES) &&([dicum1.Id isEqualToString:dicum2.Id]==YES)) {

                              [self.tableview.dataArray removeObject:dicum1];

                              }



                          return YES;

                      }];

02.不可变数组
//                NSArray * stortedarray3 =[arr1 sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
//                    NSDictionary * dicum1 =obj1;
//                    NSDictionary * dicum2 =obj2;
//
//                    if ([dicum1[@"age"] isEqualToString:dicum2[@"age"]]==YES) {
//
//                        [parray removeObject:dicum1];
//
//
//                    }
//
//                      //升序
//            //          NSComparisonResult  result =[obj1 compare:obj2];
//
//                      //降序
//                      //   NSComparisonResult  result =[obj2 compare:obj1];
//
//                      return YES;
//
//                  }];

NSArray *array = [NSArray arrayWithObjects:@"75",@"23",@"43",@"12",@"02", nil];

        //普通排序系统自带的升序
        NSArray *sortedArray1 = [array sortedArrayUsingSelector:@selector(compare:)];
//  NSLog(@"排序后1:%@",sortedArray1);

    //当然先这样实现了升序,但你想要降序,怎么办?
    //倒序输出 -> 得到降序数组
    sortedArray1 = [[sortedArray1 reverseObjectEnumerator] allObjects];
     NSLog(@"降序 = %@",sortedArray1);

没有带(字典(对象))的数组对比
//           NSArray * arr1 = @[@1,@2,@3];
//
//            NSArray * arr2 = @[@2,@3,@4,@5];
//
//            NSPredicate * filterPredicate = [NSPredicate predicateWithFormat:@"NOT (SELF IN %@)",arr1];
//
//            NSArray * filter = [arr2 filteredArrayUsingPredicate:filterPredicate];
//           NSLog(@"%@",filter);

    NSArray * stortedarray3 =[array sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        //升序
        NSComparisonResult  result =[obj1 compare:obj2];
        
        //降序
        //   NSComparisonResult  result =[obj2 compare:obj1];
        
        return result;
        
    }];
 
  1. 高级排序:按描述进行排序(制定一套排序规则 )
  NSMutableDictionary * dic =[NSMutableDictionary dictionary];
    dic[@"name"] =@"ahao";
    dic[@"age"] =@"17";
    NSMutableDictionary * dic12 =[NSMutableDictionary dictionary];
       dic12[@"name"] =@"yu";
       dic12[@"age"] =@"50";
    NSMutableDictionary * dic23 =[NSMutableDictionary dictionary];
       dic23[@"name"] =@"chong";
       dic23[@"age"] =@"30";
     NSArray *array = [NSArray arrayWithObjects:dic,dic12,dic23, nil];
    
    NSSortDescriptor * re =[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    NSSortDescriptor * re1 =[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES];
    
//按年龄排序
NSArray * dearray =[NSArray arrayWithObjects:re1,re, nil];
//(升序)    
    NSArray * dearray1 =[array sortedArrayUsingDescriptors:dearray];
    //降序
    NSArray *   sortedArray1 = [[dearray1 reverseObjectEnumerator] allObjects];
      NSLog(@"降序%@",sortedArray1);
    NSLog(@"排序%@",dearray1);

4 字典排序

 对字典(Key-Value)排序 不区分大小写
 
 @param dict 要排序的字典
 */
- (void)sortedDictionarybyLowercaseString:(NSDictionary *)dict{
    
    //将所有的key放进数组
    NSArray *allKeyArray = [dict allKeys];
    
    //序列化器对数组进行排序的block 返回值为排序后的数组
    NSArray *afterSortKeyArray = [allKeyArray sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id
    Nonnull obj2) {
/**
       
        - (NSComparisonResult)compare:(NSString *)string;
         
         compare方法的比较原理为,依次比较当前字符串的第一个字母:
         如果不同,按照输出排序结果
         如果相同,依次比较当前字符串的下一个字母(这里是第二个)
         以此类推
         
         排序结果
         NSComparisonResult resuest = [obj1 compare:obj2];为从小到大,即升序;
         NSComparisonResult resuest = [obj2 compare:obj1];为从大到小,即降序;
         
         注意:compare方法是区分大小写的,即按照ASCII排序
         */
        //小写转化
        obj1 = [obj1 lowercaseString];
        obj2 = [obj2 lowercaseString];
        //排序操作
        NSComparisonResult resuest = [obj1 compare:obj2];
        return resuest;
    }];
    NSLog(@"afterSortKeyArray:%@",afterSortKeyArray);
    
    //通过排列的key值获取value
    NSMutableArray *valueArray = [NSMutableArray array];
    for (NSString *sortsing in afterSortKeyArray) {
        NSString *valueString = [dict objectForKey:sortsing];
        [valueArray addObject:valueString];
    }
    NSLog(@"valueArray:%@",valueArray);
}

5 简单测试代码

NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@"Danny",@"Basd",@"12",@"Cerff",@"man",@"ABCDEFG",@"Sean",@"Cerf",nil];
    NSLog(@"dictionary:%@",dict);
    [self sortedDictionary:dict];

你可能感兴趣的:(iOS-排序)