【问题标题】:Combine multiple arrays in one array of hashes将多个数组合并到一个哈希数组中
【发布时间】:2022-09-27 15:21:12
【问题描述】:

我有这样的哈希

name = [\'Jhon Doe\', \'Jane Doe\' , \'David\']
role = [\'Admin\', \'Accountant\', \'Sales\']

我想让它看起来像这样

data = [
      {name => \'Jhon Doe\', role => \'Admin\'},
      {name => \'Jane Doe\', role => \'Accountan\'},
      {name => \'David\', role => \'Sales\'}
]

有可能做这样的事情吗?

  • 名称和角色不是有效的哈希
  • 它们看起来根本不像哈希:D
  • 哈哈对不起我是初学者,但我可以合并这两个看起来像数据吗?
  • 您的输入哈希是数组,而不是哈希,并且您想要的输出不是合法的 Ruby(除非 namerole 在范围内定义和初始化局部变量或方法)。另外,这与 Rails 有什么关系?

标签: arrays ruby-on-rails ruby hash


【解决方案1】:

这是一个相当简单的解决方案:

name.zip(role).map {|name, role| { name:, role: }}
#=> [
#     { name: 'Jhon Doe', role: 'Admin' },
#     { name: 'Jane Doe', role: 'Accountant' },
#     { name: 'David',    role: 'Sales' }
#   ]

【讨论】:

    【解决方案2】:

    您可以使用producttranspose 获得所需的结果:

    [[:name].product(name), [:role].product(role)].transpose.map(&:to_h)
    

    可能更优雅的解决方案是使用mapwith_index

    name.map.with_index { |name_i, index| { name: name_i, role: role[index] } }
    

    【讨论】:

    • 我想你的意思是{ name: name_i, ....}。或者,name.each_index.map { |index| { name: name[index], role: role[index] } }
    • @CarySwoveland:是的,谢谢)
    【解决方案3】:

    这里的名称和角色应该是array,而不是hash

    name = ['Jhon Doe', 'Jane Doe' , 'David']
    role = ['Admin', 'Accountant', 'Sales']
    

    您可以使用以下内容生成输出哈希

    my_hash_array = []
    name.size.times{|i| my_hash_array << {name: name[i], role: role[i]} }
    

    我希望这能帮到您。

    【讨论】:

      猜你喜欢
      • 2020-07-24
      • 2016-10-07
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      相关资源
      最近更新 更多