[英]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.