用Swift将一本词典乘以另一本词典
目前,我有一个嵌套字典声明为:用Swift将一本词典乘以另一本词典,swift,dictionary,nested,Swift,Dictionary,Nested,目前,我有一个嵌套字典声明为: let VitamineARetinol = "VitamineARetinol" let VitamineABetacarotene = "VitamineABetacarotene" let VitamineC = "VitamineC" let VitamineD = "VitamineD" let Calories = "Calories" typeali
let VitamineARetinol = "VitamineARetinol"
let VitamineABetacarotene = "VitamineABetacarotene"
let VitamineC = "VitamineC"
let VitamineD = "VitamineD"
let Calories = "Calories"
typealias ListOfAliment = [String: [String: Double]]
let Data: ListOfAliment = [
"Orange": [VitamineARetinol: 0.5, VitamineC: 0.3, VitamineD: 0.98, Calories: 160],
"Pomme": [VitamineARetinol: 0.2, VitamineC: 0.2, VitamineD: 0.38, Calories: 120],
"Poire": [VitamineARetinol: 0.1, VitamineC: 0.7, VitamineD: 0.58, Calories: 140],
"Laitue": [VitamineARetinol: 0.3, VitamineC: 0.1, VitamineD: 0.92, Calories: 105],
"Banane": [VitamineARetinol: 0.7, VitamineC: 0.01, VitamineD: 0.63, Calories: 122],
]
我需要在下面的字典中将每个值与其对应的值分开:
let reference: ListOfAliment = [
"reference": [VitamineARetinol: 0.2, VitamineC: 0.1, VitamineD: 0.4],
]
最后,我应该得到一本食物字典,里面有所有的价值观在词典参考中,每种食物的价值都被其相应的价值所除
求求你,谁能帮帮我 您应该为内部字典创建一个结构。因为您可以在结构中添加一个divided方法来进行除法。我不确定把一种食物“分”给另一种食物是否有意义。如果是这样,您可以将
divideBy
方法改为接受另一个Aliment
struct Aliment {
let vitaminARetinol: Double
let vitaminC: Double
let vitaminD: Double
let calories: Double
func dividedBy(vitaminARetinolFactor: Double, vitaminCFactor: Double, vitaminDFactor: Double, caloriesFactor: Double) -> Aliment {
Aliment(vitaminARetinol: vitaminARetinol / vitaminARetinolFactor,
vitaminC: vitaminC / vitaminCFactor,
vitaminD: vitaminD / vitaminDFactor,
calories: calories / caloriesFactor)
}
}
typealias ListOfAliment = [String: Aliment]
let data: ListOfAliment = [
"Orange": Aliment(vitaminARetinol: 0.5, vitaminC: 0.3, vitaminD: 0.98, calories: 160),
"Pomme": Aliment(vitaminARetinol: 0.2, vitaminC: 0.2, vitaminD: 0.38, calories: 120),
"Poire": Aliment(vitaminARetinol: 0.1, vitaminC: 0.7, vitaminD: 0.58, calories: 140),
"Laitue": Aliment(vitaminARetinol: 0.3, vitaminC: 0.1, vitaminD: 0.92, calories: 105),
"Banane": Aliment(vitaminARetinol: 0.7, vitaminC: 0.01, vitaminD: 0.63, calories: 122),
]
要转换字典,可以使用mapValues
:
let referenceNumbers = reference["reference"]!
let newData = data.mapValues {
$0.dividedBy(vitaminARetinolFactor: referenceNumbers[VitamineARetinol]!,
vitaminCFactor: referenceNumbers[VitamineC]!,
vitaminDFactor: referenceNumbers[VitamineD]!,
caloriesFactor: referenceNumbers[Calories]!)
}
同样,如果将一个aliment除以另一个aliment是有意义的,那么您也可以将引用设为aliment
对象,并将其传递给divideBy
如果我在您的
let adjustedData = array
.map { Aliment(name: $0.name,
vitamineARetinol: $0.vitamineARetinol / 0.2,
vitaminC: $0.vitaminC / 0.1,
vitaminD: $0.vitaminD / 0.4,
calories: $0.calories)}
你为什么不使用自己的结构?你能告诉我如何创建好的结构吗?