Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Swift将一本词典乘以另一本词典_Swift_Dictionary_Nested - Fatal编程技术网

用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)}

你为什么不使用自己的结构?你能告诉我如何创建好的结构吗?