如何获得哈希的某些值?

时间:2018-10-11 18:17:15

标签: ruby hash

在下面的嵌套哈希中,

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对。我错过任何代码吗?如何获得如上所述的返回值?

2 个答案:

答案 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}