gpt4 book ai didi

json - reduce 函数正在打印一个空字典 [ :]

转载 作者:行者123 更新时间:2023-11-28 10:34:33 26 4
gpt4 key购买 nike

我在这个 question 中成功地减少了我的字典键作为没有真正的 json 模型的伪代码。我在上一个问题中实现的目标是仅返回具有匹配值的键。所以输出是一个看起来像这样的字典 ["WoW": ["@jade", "@kalel"]。正是我所需要的。当然可能还有其他比赛,我也想归还。

现在我有了一个合适的 json 模型,reduce 函数打印出一个空字典 [:]。是 .reduce(into: [String:[String]]() 中的类型导致了问题吗?

所有数据都在打印,所以 json 和模型结构必须正确。

json

[
{
"id": "tokenID-tqkif48",
"name": "@jade",
"game": "WoW",
"age": "18"
},
{
"id": "tokenID-fvkif21",
"name": "@kalel",
"game": "WoW",
"age": "20"
}
]

用户模型

public typealias Users = [UserModel]
public struct UserModel: Codable {

public let name: String
public let game: String
// etc...

enum CodingKeys: String, CodingKey {
case name
case game
// etc...

Playground

guard let url = Bundle.main.url(forResource: "Users", withExtension: "json") else {
fatalError()
}
guard let data = try? Data(contentsOf: url) else {
fatalError()
}

let decoder = JSONDecoder()

do {
let response = try decoder.decode([UserModel].self, from: data)
for userModel in response {

let userDict: [String:String] = [ userModel.name:userModel.game ]

let reduction = Dictionary(grouping: userDict.keys) { userDict[$0] ?? "" }.reduce(into: [String:[String]](), { (result, element) in
if element.value.count > 1 {
result[element.key] = element.value
}
})
// error catch etc
}

最佳答案

你的代码太复杂了。您可以简单地通过 game 对数组进行分组

let response = try decoder.decode([UserModel].self, from: data)
let reduction = Dictionary(grouping: response, by: {$0.game}).mapValues{ usermodel in usermodel.map{ $0.name}}

关于json - reduce 函数正在打印一个空字典 [ :],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54335800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com