繁体   English   中英

Swift 4 JSON转换成字典数组

[英]Swift 4 JSON into array of dictionaries

我有这样的JSON响应:

[
    {
        "category": C5,
        "group": G43
    },
    {
        "category": C5,
        "group": G43
    },
    {
        "category": C10,
        "group": G1
    },
    {
        "category": C10,
        "group": G1
    },
    {
        "category": C3,
        "group": G1
    },
    {
        "category": C3,
        "group": G1
    },
    {
        "category": C2,
        "group": G3
    },
    {
        "category": C4,
        "group": G3
    }
    ]

我需要将“类别”和“组”分组,其中它们的值相等。 我要创建词典,其键为“类别”,值是2组数组。”结果必须像这样:

[
C5 : [G43]
C10 : [G1]
C3 : [G1, G2]  
C2 : [G3]
C4 : [G3]
]

我创建了两个不同的类,一个用于类别,一个用于组,我尝试通过一个for循环来实现,并且我尝试在for循环中使用Dictionary(grouping:, by:) ,但我认为我没有错路径。 我需要将数组分组两次吗? 我如何以一种干净的方式来做?

与其尝试使用字典,不如尝试将它们转换为实际上代表数据是什么的类型……

struct Something {
    let category: String
    let group: String
}

let array = [Something(category:  "C5", group: "G43"),
             Something(category:  "C5", group: "G43"),
             Something(category:  "C10", group: "G1"),
             Something(category:  "C10", group: "G1"),
             Something(category:  "C3", group: "G1"),
             Something(category:  "C3", group: "G2"),
             Something(category:  "C2", group: "G3"),
             Something(category:  "C4", group: "G3")]

let groups = Dictionary(grouping: array, by: {$0.category} )

group.forEach { key, somethings in
    print(key)
    print(somethings.map({$0.group}))
}

C10
["G1", "G1"]
C3
["G1", "G2"]
C5
["G43", "G43"]
C2
["G3"]
C4
["G3"]

编辑

如果您要删除重复的组…

group.forEach { key, somethings in
    print(key)
    print(Set(somethings.map({$0.group})))
}

C3
["G1", "G2"]
C2
["G3"]
C4
["G3"]
C5
["G43"]
C10
["G1"]

并且如果您真的想使用字典,并且失去结构所附带的类型安全性和自动完成功能…

let array = [["category":  "C5", "group": "G43"],
             ["category":  "C5", "group": "G43"],
             ["category":  "C10", "group": "G1"],
             ["category":  "C10", "group": "G1"],
             ["category":  "C3", "group": "G1"],
             ["category":  "C3", "group": "G2"],
             ["category":  "C2", "group": "G3"],
             ["category":  "C4", "group": "G3"]]

let group = Dictionary(grouping: array, by: {$0["category"]} )

group.map { key, somethings in
    print(key!)
    print(Set(somethings.map({$0["group"]!})))
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM