美文网首页
iOS dic按照key出现的顺序取出value

iOS dic按照key出现的顺序取出value

作者: money_ac9e | 来源:发表于2019-10-16 10:44 被阅读0次

    最近碰到一个问题
    接口返回的是json,转化为了字典,需要按照顺序显示value
    众所周知 字典是无序的 那怎么按照key出现的顺序显示value呢?

    思路
    1.json转化为字典dic1
    2.取出所有的key,生成数组keys,遍历keys,将json根据key分割字符串,取出第0个数据作为新字典的key,原来的key作为value,变成新的字典dic2
    3.dic2中取出所有的key,生成数组keys,keys按照长短取出数据,短的就是在前面,长的在后面,最后遍历根据dic2生成新的数组
    4.遍历数组,根据dic1得到需要的数组

    代码如下
    .h中的代码

    + (NSArray *)getResultArray:(NSString *)result;
    

    .m中的代码

    //1.转化为json
    + (NSArray *)getResultArray:(NSString *)result
    {
        //1.转化为json
        if (result == nil) {
            return @[];
        }
        NSData *jsonData = [result dataUsingEncoding:NSUTF8StringEncoding];
        NSError *err;
        NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&err];
        if(err) {
            NSLog(@"json解析失败:%@",err);
            return @[];
        }
        
        //2.得到所有的key
        NSArray *keys = [dic allKeys];
        NSMutableDictionary *needDic = [NSMutableDictionary dictionary];
        for (NSString *key in keys) {
            if ([result containsString:key]) {
                //3.取出字符串通过key 得到的前面的字符串 并保存到新的字典中
                NSArray *arr = [result componentsSeparatedByString:key];
                NSString *lenth = arr[0];
                [needDic setValue:key forKey:lenth];
            }
        }
        
        //4.遍历得到字符串中按照循序出现的keys
        NSMutableArray *needKeys = [NSMutableArray array];
        NSArray *a0 = [[needDic allKeys] sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
            NSUInteger len0 = [(NSString *)obj1 length];
            NSUInteger len1 = [(NSString *)obj2 length];
            return len0 > len1 ? NSOrderedDescending : NSOrderedAscending;
        }];
        [a0 enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            [needKeys addObject:needDic[obj]];
        }];
        
        //5.取出数据
        NSMutableArray *examTXArr = [NSMutableArray array];
        [needKeys enumerateObjectsUsingBlock:^(NSString * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
            [examTXArr addObject:dic[obj]];
        }];
        
        return examTXArr;
    }
    

    例子:

    NSDictionary *dic = @{@"id2":@"11111",@"id1":@"2222",@"id3":@"33333"};
        
        NSError *parseError = nil;
        
        NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
        
        NSString *str1 = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
        
        NSArray *arr1 = [NSArrayTools getResultArray:str1];
    

    例子中key 的可变的,这里根据key出现的顺序得到value并生成新的数组
    最后arr1如下

    Printing description of examTXArr:
    <__NSArrayM 0x6000037a0180>(
    11111,
    2222,
    33333
    )
    

    相关文章

      网友评论

          本文标题:iOS dic按照key出现的顺序取出value

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