Je travaille sur un système de traduction et j'ai besoin de construire une "carte" de traduction des champs à traduire. Pour commencer, j'ai besoin de construire la structure de données avec un ensemble de paramètres par défaut.Comment créer un hachage à double imbrication dans Ruby?
Disons que j'ai ces variables:
fields = [:title, :description]
languages = [:en, :fr]
J'essaie de trouver la façon la plus simple de créer un hachage qui ressemble à ceci:
{
:detection => {
:title => {
:en => :en,
:fr => :fr
},
:description => {
:en => :en,
:fr => :fr
}
},
# ... other fields
}
Je sais que je peux faire ceci en itérant sur la variable fields
et, à l'intérieur de celle-ci, construisez les valeurs de hachage internes en utilisant la méthode zip
de Ruby. Ce que je ne sais pas, cependant, c'est s'il y a un moyen de "doubler" les valeurs externes et internes de ces deux champs. Quelque chose comme { :detection => fields.zip(languages.zip(languages)) }
(je sais que ce n'est pas la bonne façon d'utiliser zip
mais c'est l'idée que je suis après).
Encore une fois, je peux le faire avec une boucle sur fields
mais je suis curieux de savoir si je peux le faire différemment?
Merci!
Voilà comment il est actuellement mis en œuvre (mise en boucle):
def build_default_detection_data
fields = [:title, :description]
languages = [:en, :fr]
default = {
detection_map: {},
}
fields.each do |field|
default[:detection_map][field] = Hash[languages.zip(languages)]
end
default
end
Merci, @Alex. Beaucoup mieux. –