Как я могу достичь определенных значений хеша? - PullRequest
0 голосов
/ 11 октября 2018

В следующем вложенном хэше

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 голосов
/ 11 октября 2018

Я бы сделал что-то вроде:

hash.values.find(&Hash.method(:===))
#=> {:name=>"John", :id=>12, :age=>33}
0 голосов
/ 11 октября 2018

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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...