在下面的嵌套哈希中,
hash = {a: 2, b: 4, c: {name: "John", id: 12, age: 33}}
我想返回散列的值:
{:name => "John", :id => 12, :age => 33}
我想返回一个散列。我以为以下代码可以完成这项工作:
hash.select! {|_k, v| v.is_a?(Hash)}
# => {:c => {:name => "John", :id => 12, :age => 33}}
但是我都得到了k / v对。我错过任何代码吗?如何获得如上所述的返回值?
答案 0 :(得分:3)
我会做类似的事情:
hash.values.find(&Hash.method(:===))
#=> {:name=>"John", :id=>12, :age=>33}
答案 1 :(得分:0)
select
返回匹配的键和值。添加.values
仅获得不带键的值:
hash.select! { |_k, v| v.is_a?(Hash) }.values
这将返回与select
匹配的值的数组:
[{:name=>"John", :id=>12, :age=>33}]
如果您知道将永远只有一个结果,则可以通过调用first
来获得所需的值:
hash.select! { |_k, v| v.is_a?(Hash) }.values.first
{:name=>"John", :id=>12, :age=>33}