Swift 如何在自定义类型上使用压缩映射?

Swift 如何在自定义类型上使用压缩映射?,swift,dictionary,Swift,Dictionary,我将使用压缩映射来减少代码。但我无法将自定义结构转换为[String:String]类型 struct Sample { let key: String let value: String } let all = [Sample]() 我想把所有的样本放到字典里。所以我使用了compact-map&它返回错误 无法将“[[String:String]]”类型的值转换为指定的类型 “[String:String]” 但我不知道我需要用什么 let dictionary: [S

我将使用压缩映射来减少代码。但我无法将自定义结构转换为
[String:String]
类型

struct Sample {

    let key: String
    let value: String
}

let all = [Sample]()
我想把所有的样本放到字典里。所以我使用了compact-map&它返回错误

无法将“[[String:String]]”类型的值转换为指定的类型 “[String:String]”

但我不知道我需要用什么

let dictionary: [String: String] = all.compactMap{[$0.key: $0.value]}
请帮我找出正确的解决办法。提前感谢大家…

您可以使用:


.init(uniqueKeysWithValues:all.map{($0.key,$0.value)})
Reduce可以。这完全取决于你的顺序。这要求序列具有uniqueKeysWithValues,而reduce将覆盖以前的值而不发出警告如果序列可能具有重复的键字典有另一个初始值设定项,您可以在其中决定保留第一个值或最后一个
.init(all.map{($0.key,$0.value)}{first,last-in-first}
如果要将多个值添加到同一个键
all.reduce(到:[:]){$0[$1.key,默认值:[].append($1.value)}
let dictionary=dictionary(uniqueKeysWithValues:all.map{($0.key,$0.value)}
。或者
let dictionary=dictionary(分组:all){$0.key}
。。。
let dictionary = all.reduce(into: [:]) { dict, elem in
   dict[elem.key] = elem.value
}