Получить значение определенного ключа из массива хэшей - PullRequest
0 голосов
/ 01 декабря 2018

params = [{id: 1, name: 'hoge'}, {id: 2, name: 'fuga'}]

Я знаю, что могу получить значения определенного ключа таким образом.

params.map{ |u| u.name }
=> ["hoge", "fuga"]

Но я хочу сделать это без блока, как показано ниже,

params.map(&:name)

Если params - ActiveRecord, я могу сделать это вышеописанным способом.Даже если params - хеш, скажите, пожалуйста, кто-нибудь знает, как это сделать?

Ответы [ 3 ]

0 голосов
/ 01 декабря 2018

Дано

params = [{id: 1, name: 'hoge'}, {id: 2, name: 'fuga'}]

Как говорит emaillenin, вы можете сделать:

params.map { |p| OpenStruct.new(p) }.map(&:name)

Но, если вы сделаете:

params.map { |p| OpenStruct.new(p).name }

Вы сохраните итерацию исемь нажатий клавиш.А если вы сделаете:

params.map { |p| p[:name] }

Вы сохраните дополнительные 14 символов.Но вы не можете сделать:

params.map{ |u| u.name }

Если u является Hash.И вы не можете сделать:

params.map(&:name)
0 голосов
/ 01 декабря 2018

Если вы используете рельсы, а не ванильный рубин, вам действительно нужно: pluck!

params = [{id: 1, name: 'hoge'}, {id: 2, name: 'fuga'}]
params.pluck(:name)

=> ["hoge", "fuga"]

https://apidock.com/rails/ActiveRecord/Calculations/pluck

0 голосов
/ 01 декабря 2018
params = [{id: 1, name: 'hoge'}, {id: 2, name: 'fuga'}]
params.map { |p| OpenStruct.new(p) }.map(&:name)

# ["hoge", "fuga"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...