繁体   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