2017-02-21 71 views
-1
atts = { 
    key1: "value1", 
    key2: "value2" 
} 

然後應該會產生以下:轉換紅寶石散列到另一個集合

custom_atts = { 
    "key1" => { 
    string_value: "value1", 
    data_type: "String" 
    }, 
    "key2" => { 
    string_value: "value2", 
    data_type: "String" 
    } 
} 

所以我要創造條件,ATT以轉換成custom_atts的功能。

def custom_atts(atts) 

end 

我可以通過哈希值這樣的循環:

h.each do |key, value| 
    puts key 
    value.each do |k,v| 
    puts k 
    puts v 
    end 
end 

,但不知道如何創建一個哈希在它的散列,而在一個循環。

+0

您使用'map'在ruby中做這樣的事情 – phoet

回答

1

試試這個:

atts = { 
    key1: "value1", 
    key2: "value2" 
} 

def custom_atts(atts) 

    Hash[ atts.keys.map { |key| 
      [ key, { 
       string_value: atts[key], 
       data_type: "String" } ] } ] 

end 

puts custom_atts(atts).inspect 

# {:key1=> 
# {:string_value=>"value1", 
# :data_type=>"String"}, 
# :key2=>{ 
# :string_value=>"value2", 
# :data_type=>"String"}} 

如果你的新鑰匙應弦而不是符號,然後更改keykey.to_s地圖內。

+0

這對我的作品感謝,想知道downvote是什麼? – Blankman

+0

有人可能會因爲'atts'鍵是符號而被低估,但所需的結果會將這些鍵轉換爲字符串。 –

+0

...這是最後可選的'to_s'的用途;另外,我真的相信這是一個符號還是字符串不是提出這個問題的主要原因。 ;)愛Ruby表達能力,能夠做出如此簡短的解決方案。 – AnoE

0
atts.each_with_object({}) { |(k,v),h| h[k.to_s] = { string_value: v, data_type: v.class } } 
    #=> {"key1"=>{:string_value=>"value1", :data_type=>String}, 
    # "key2"=>{:string_value=>"value2", :data_type=>String}}