【发布时间】:2016-01-18 16:38:00
【问题描述】:
我正在尝试从这个哈希构建一个 new_hash:
languages = {
:oo => {
:ruby => {
:type => "interpreted"
},
:javascript => {
:type => "interpreted"
},
:python => {
:type => "interpreted"
}
},
:functional => {
:clojure => {
:type => "compiled"
},
:erlang => {
:type => "compiled"
},
:javascript => {
:type => "interpreted"
}
}
}
而期望的结果是:
{
:ruby => {
:type => "interpreted",
:style => [:oo]
},
:javascript => {
:type => "interpreted",
:style => [:oo, :functional]
},
:python => {
:type => "interpreted",
:style => [:oo]
},
:clojure => {
:type => "compiled",
:style => [:functional]
},
:erlang => {
:type => "compiled",
:style => [:functional]
}
}
这是我到目前为止所做的:
def reformat_languages(languages)
new_hash = {}
languages.each do |k, v|
v.each do |k1, v1|
new_hash[k1] = v1
new_hash[k1][:style] = []
new_hash[k1][:style] << k
end
end
new_hash
end
很遗憾,我无法得到想要的结果。我知道当迭代到达第二个 javascript 键时,它会重写第一个迭代给我:
:javascript => {
:type => "interpreted",
:style => [:functional]
}
代替:
:javascript => {
:type => "interpreted",
:style => [:oo, :functional]
}
这是一个 repl.it 的链接,您可以在其中看到正在运行的代码:https://repl.it/BebC
我知道我需要使用条件,但我不确定在哪里以及在什么情况下使用它。如果有人可以帮助我获得所需的结果并解释一下为什么它会以这种方式工作。
【问题讨论】: