应用deep_symbolize_keys!散列数组

时间:2019-05-23 23:28:00

标签: ruby-on-rails ruby

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 个答案:

答案 0 :(得分:1)

您需要副本还是就地转换?就地可以使用arr.each(&:deep_symbolize_keys!)。对于副本,您应该使用arr.map(&:deep_symbolize_keys)。请记住,地图不会突变,但会返回一个新数组。