Невозможно извлечь данные из хэша - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть массив хэшей:

array_hash = [{product: 'A', qty: 1}, {product: 'B', qty: 2}]

Я хочу получить значение первого ключа "product".

Я получаю ожидаемый хэш с этим кодом:

get_first_hash = array_hash[0]
# => {product: 'A', qty: 1}

Однако этот код возвращает nil:

get_value = get_first_hash['product']
# => nil

Я надеюсь, что кто-то может сказать мне об этом.

Ответы [ 2 ]

0 голосов
/ 20 ноября 2018

Я предполагаю, что вы привыкли использовать Hash в Ruby on Rails, который подклассов класса Hash, который поставляется с Ruby как HashWithIndifferentAccess, и вы обычноникогда не заставляет смотреть на это как на разработчика (в Rails).Также следует отметить, что Rails напрямую изменяет базовый * класс Ruby Hash класс, так что на самом деле вы имеете гораздо больше доступных вам в Rails (или, особенно, когда ActiveSupport) загружено).

Ruby (чистый), однако не возится с ключами в хэше.Это позволяет использовать некоторые мощные приложения - помните, что в Ruby все является объектом.

Таким образом, 'string' и :symbol являются одновременно объектами и разными объектами.Вы даже можете использовать Class в качестве ключа в своем хэше.

{
  Object => :object_symbol,
  Class => :class_symbol
}

Так что, когда вы пытаетесь получить доступ к значениям за ключом в вашем хэше, убедитесь, что вы используете именно тот ключ.1024 *

В приведенном выше примере вы используете символ product в качестве ключа.Ruby использует : для обозначения этого.

{
  product: 'A',
  qty: 1
}

Это эквивалентно высказыванию

{
  :product => 'A',
  :qty => 1
}

Итак, вы хотите позвонить get_value = get_first_hash[:product]

0 голосов
/ 20 ноября 2018

Надеюсь, этого достаточно!

array_hash.first[:product]

Если вам нужен второй, просто сделайте

array_hash.second[:product]

Кроме того, .first просто помощник для выполненияarray_hash [0], но проблема, стоящая за получением nil, заключается в том, что вам нужно представить его с помощью символа: в Ruby

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