Примените deep_symbolize_keys!к массиву хешей - PullRequest
0 голосов
/ 24 мая 2019

deep_symbolize_keys! преобразует строковые ключи в symbol ключи. Это работает для хэшей и всех вложенных хешей. Тем не менее, у меня есть такие данные:

arr = [
   {'name': 'pratha', 'email': 'p@g.com', 'sub': { 'id': 1 } },
   {'name': 'john', 'email': 'c@d.com', 'sub': { 'id': 2 } }
]
arr.deep_symbolize_keys! # this is not working for array of hashes.

В этом случае хэши находятся в массиве. Так как я могу символизировать все сразу?

Использование Ruby 2.6.3

Я также где-то читал, что это deprecated (, вероятно, на одном из форумов Rails ). Это правда? Если да, то как лучше всего конвертировать ключи в символы в моем случае?

В настоящее время используется это:

def process(emails)
  blacklist = ["a", "john", "c"]
  e = emails.map do |hash| 
    blacklist.include?(hash['name']) ? nil : hash.deep_symbolize_keys!
  end

  e
end

1 Ответ

1 голос
/ 24 мая 2019

Вам нужна копия или преобразование на месте?На месте вы можете использовать arr.each(&:deep_symbolize_keys!).Для копирования вы должны использовать arr.map(&:deep_symbolize_keys).Помните, что карта не изменяется, но возвращает новый массив.

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