我想從這個哈希建立new_hash:迭代通過使用條件語句中的Ruby
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
我知道我需要使用條件,但我不確定在哪裏以及使用它。如果有人能夠幫助我獲得理想的結果,並解釋一下爲什麼它的工作方式如此。
也很好的命名在這裏會有很大的幫助,但他會及時瞭解到這一點。 :) –