簡體   English   中英

重建哈希,命名和替換問題

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM