我正在开发一个语言翻译系统,需要构建一个“地图”,说明应该如何翻译要翻译的字段。首先,我需要使用一组默认值构建数据结构。
假设我有这些变量:
fields = [:title, :description]
languages = [:en, :fr]
我试图找到最简单的方法来创建一个看起来像这样的哈希:
{
:detection => {
:title => {
:en => :en,
:fr => :fr
},
:description => {
:en => :en,
:fr => :fr
}
},
# ... other fields
}
我知道我可以通过迭代fields
变量来做到这一点,并在其中使用 Ruby 的zip
方法构建内部哈希值。但是,我不知道是否有办法从这两个字段中“双重压缩”外部和内部值。类似的东西{ :detection => fields.zip(languages.zip(languages)) }
(我知道这不是正确的使用方式,zip
但这就是我所追求的想法)。
同样,我可以通过循环来执行此操作,fields
但我很好奇是否可以以不同的方式执行此操作?
谢谢!
以下是它当前的实现方式(使用循环):
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