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

热门标签

特别声明:文章多为网络转载,资源使用一般不提供任何帮助,特殊资源除外,如有侵权请联系!

最近碰到一个问题
接口返回的是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
)

 

标签:

未经允许不得转载:作者:SheaYang, 转载或复制请以 超链接形式 并注明出处 技术Dog|博客
原文地址:《iOS dic按照key出现的顺序取出value》 发布于2019-10-28

分享到:
赞(0)

评论 抢沙发

5 + 9 =


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

长按图片转发给朋友

Vieu4.0主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
  • 去评论
  • QQ咨询
  • 去顶部

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录