J'ai une gamme de dictionnaire avec supposons 10 ensemble de dictionnaires. Dans ce chacun des deux dictionnaires, c'est un couple, ils ont une clé spécifique dont les valeurs sont identiques.
Maintenant, je dois combiner ces deux dictionnaires en fonction de cette clé / ID spécifique. Donc, dans ma sortie finale, je recevrai une gamme de dictionnaire avec 5 séries de dictionnaires (combinant 2 chacun) p>
dans le jeu d'exemples ci-dessous, vous pouvez voir que la paire de dictionnaires dont l'âge est le même que j'essaie pour les combiner en un. p> et p>
3 Réponses :
Ce que vous voulez essentiellement est de groupe em> vos dictionnaires par une clé ( quelque chose comme ça serait le travail p> qui vous donne p> Notez que vous pourriez forcer le déclenchement ( J'espère que cela a du sens p> p> Âge code> dans cet exemple). 0 $ ["Âge"] as! Int code>) Si vous pouvez garantir que tous vos objets auraient toujours une valeur int code>, afin d'éviter les groupements d'INT en option. p>
Ce n'est pas ce que le questionneur a demandé, mais cela vous met à mi-chemin.
@Danielt. La solution suggérée de OP (la fusion du dictionnaire) à un problème de regroupement a été délibérément omise dans ma réponse; Je considère toujours le problème et ainsi proposé une approche alternative.
Vous avez une construction folle que vous devez transformer. Il ne semble pas très utile, mais si vous avez vraiment besoin des données dans ce format, voici ce qui le fera:
func example(objects: [AnyObject]) -> [[String: Any]] {
let input = objects as! [[String: Any]]
return Dictionary.init(grouping: input, by: { $0["age"] as! Int })
.mapValues {
$0.map { (obj) -> [String: Any] in
var out = obj
out.removeValue(forKey: "age")
return out
}
}
.map { (each) -> [String: Any] in
var dict: [String: Any] = ["age": each.key]
for obj in each.value.enumerated() {
for c in obj.element {
let key = "\(c.key)\(obj.offset + 1)"
dict[key] = c.value
}
}
return dict
}
}
Hey @Daniel Merci pour l'assistance, j'ai essayé votre extrait d'extraits fournis en fonction de mon exigence, alors j'utilise fondamentalement mon contenu d'entrée en tant que format [(AnyObject)] et que vous appliquez [[[[chaîne: tout]] Fusionner tout l'ensemble de l'ensemble de dictionnaires d'abord lui-même. Donc, à la fin, il ne traite que deux derniers éléments de la gamme de dictionnaires. Je crois que vous pouvez m'aider aussi avec cela. Merci d'avance.
Vous y allez, maintenant l'entrée est [anyobject] code>
Vous pouvez exécuter une boucle sur le dictionnaire que vous souhaitez saisir, l'un ou l'autre ne pensez pas que cela importerait dans ce cas
extension Dictionary {
mutating func append(_ other:Dictionary) {
// you can do a check here; write a guard checking if the one you're trying to add should be added
for (key,value) in other {
self.updateValue(value, forKey:key)
}
}
}
Pouvez-vous montrer exactement ce que l'entrée et le résultat attendu sont?