【问题标题】:Dictionary from an Array of Dictionary - Logical Challenge in Objective-C字典数组中的字典 - Objective-C 中的逻辑挑战
【发布时间】:2019-12-15 05:16:59
【问题描述】:

目标是将字典数组转换为一个包含不同对象的字典。我该怎么做?

我有一个这种格式的记录数组,

originalArray = [{
        "valid": "Y",
        "mof": "ON",
        "dof": "17-05-2019",
        "rtntype": "CODE1",
        "ret_prd": "042019",
    },
    {
        "valid": "Y",
        "mof": "ON",
        "dof": "19-04-2019",
        "rtntype": "CODE1",
        "ret_prd": "032019",
    },
    {
        "valid": "Y",
        "mof": "ON",
        "dof": "19-04-2019",
        "rtntype": "CODE2",
        "ret_prd": "032019",
    }
]

我想创建一个以下格式的字典。

{
    "032019" = {
        "CODE1" = {
            "valid": "Y",
            "mof": "ON",
            "dof": "19-04-2019",
            "rtntype": "CODE1",
            "ret_prd": "032019",
            },
        "CODE2" = {
            "valid": "Y",
            "mof": "ON",
            "dof": "19-04-2019",
            "rtntype": "CODE2",
            "ret_prd": "032019",
            "status": "Filed"
        }
    },
    "042019" =  {
        "CODE1" = {
            "valid": "Y",
            "mof": "ON",
            "dof": "17-05-2019",
            "rtntype": "CODE1",
            "ret_prd": "042019",
        }
    }
}

【问题讨论】:

    标签: objective-c logic nsarray nsdictionary


    【解决方案1】:

    这是我的示例,你可以自己查看

    NSArray *array = @[
        @{@"valid":@"Y",@"mof":@"ON",@"dof":@"17-05-2019",@"rtntype":@"CODE1",@"ret_prd":@"042019"},
        @{@"valid":@"Y",@"mof":@"ON",@"dof":@"19-04-2019",@"rtntype":@"CODE1",@"ret_prd":@"032019"},
        @{@"valid":@"Y",@"mof":@"ON",@"dof":@"19-04-2019",@"rtntype":@"CODE2",@"ret_prd":@"032019"}
    ];
    
    NSMutableDictionary *result = [NSMutableDictionary new];
        for (int i = 0; i < array.count; i++) {
            NSDictionary *dict = array[i];
            NSString *value = dict[@"ret_prd"];
            if (result[value] == nil) {
                NSArray *filterArray = [array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(ret_prd contains[c] %@)", value]];
                NSMutableDictionary *filterDict = [NSMutableDictionary new];
                for (int i = 0; i < filterArray.count; i++) {
                    filterDict[filterArray[i][@"rtntype"]] = filterArray[i];
                }
                result[value] = filterDict;
            }
        }
    
    NSLog(@"%@", result);
    

    控制台日志中的结果:

    很久没有编写 Objective-C 代码了,所以上面的代码可能很奇怪。如果您不知道在哪里,请告诉我,我会为您解释。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多