[英]Reconstructing a Hash, naming and replacing issue
我收到一個基於字符串的Hash
,如下所示:
"data"=>{"uno"=>"alfa", "dos"=>"beta"}
我想重建它,以便它具有以下對象結構和命名 :
beta: {uno: "alfa"}
我已經陷入了內在價值並將其轉換為密鑰的問題。 任何幫助達到上述目標將非常感激。
更新
這里有幾件事情,我后悔做了一個問題。 但現在它已經在野外,我會盡力進一步解釋。
1.密鑰需要轉換為符號
2.應該反轉"dos"=>"beta"
對
3.上述對的反轉鍵應該接管角色(來自"data"
)作為整個Hash
關鍵
PS。 由於我似乎在明確地解釋我的問題時失敗了,所以請隨意投票。
試試代碼:
h.reduce({}) { |hh,v| hh[ v[1][ 'dos' ].to_sym ] = { :uno => v[1][ 'uno' ] } ; hh }
# => {:beta=>{:uno=>"alfa"}}
如果您只想將鍵從字符串轉換為符號,請使用:
hash.inject({}){|h,(k,v)| h[k.to_sym] = v; h}
這樣做將返回: {data: {uno: "alfa", dos: "beta"}}
你可能想試試這個:
轉換為Ruby哈希的簡單方法是eval
字符串,但這很危險 。 所以我們可以使用更安全的方式:
>> s = '"data"=>{"uno"=>"alfa", "dos"=>"beta"}'
=> ""data"=>{"uno"=>"alfa", "dos"=>"beta"}"
>> require 'json'
=> true
>> t2 = "{#{s}}".gsub('=>', ':')
=> "{"data":{"uno":"alfa", "dos":"beta"}}"
>> h1 = JSON.parse(t2).to_hash
=> {"data"=>{"uno"=>"alfa", "dos"=>"beta"}}
>> {:data => h1["data"].inject({}){|h,(k,v)| h[k.to_sym] = v; h}}
=> {:data=>{:uno=>"alfa", :dos=>"beta"}}
如果你提供一些你期望的行為的例子會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.