美文网首页
iOS-排序

iOS-排序

作者: 不要动 | 来源:发表于2020-08-21 10:38 被阅读0次
    数组里面的(字典 对象)排序和对比 去重复
    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-排序

          本文链接:https://www.haomeiwen.com/subject/bvkwghtx.html