Ruby: извлечение ключа и значения из хэша - PullRequest
0 голосов
/ 12 июля 2019

У меня есть массив хэшей, из-за которых у меня возникают проблемы с извлечением key и value.Массив выглядит так:

data = [{"key"=>"Name", "value"=>"Jason"}, {"key"=>"Age", "value"=>"21"},
        {"key"=>"last_name", "value"=>"bourne"}]

Как я могу преобразовать это в следующий массив хэшей?

[{"Name"=>"Jason"}, {"Age"=>"21"}, {"last_name"=>"bourne"}]

Я смог использовать detect:

a = d.detect { |x| x["key"] == "Name" }
puts a['value'] 

чтобы получить значение для "name", но хотелось бы узнать, есть ли лучший способ.

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Расчет не должен зависеть от ключей хешей, в случае их изменения.

data.map { |h| [h.values].to_h }
  #=> [{"Name"=>"Jason"}, {"Age"=>"21"}, {"last_name"=>"bourne"}] 
1 голос
/ 12 июля 2019

Я бы сказал, что самый элегантный способ добиться этого - это, вероятно, сначала преобразовать data в хэш (при условии, что никогда не будет повторяющихся ключей), например:

data = data.map { |x| [x['key'], x['value']] }.to_h
# => {"Name"=>"Jason", "Age"=>"21", "last_name"=>"bourne"}

Метод #to_h ожидает, что каждый элемент массива будет массивом в форме [key, value], поэтому вызов #map обрабатывает каждый элемент data для преобразования его в эту форму.

Как только это будет сделано, вы можете просто получить доступ к ключам, как к любому другому хешу:

data['Name'] # => "Jason"
data['Age'] # => "21"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...