美文网首页
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