【问题标题】:Merge two array of hashes合并两个哈希数组
【发布时间】:2016-10-07 05:21:39
【问题描述】:

我有两个哈希数组,想从中做一个

first = 
[{:frontman=>"aaa", :category=>"bbb", :subcategory=>nil, :detail=>nil},other hashes]


second = 
[{:__content__=>"aaa", :id=>"9096290", :frontman=>"aaa"},other hashes]

我想拥有

一个大的哈希数组

[{:__content__=>"aaa", :id=>"9096290", :frontman=>"aaa", :category=>"bbb", :subcategory=>nil, :detail=>nil},other hashes]

我试过了

(first+second).group_by{|h| h[:frontman]}.map{|k,v| v.reduce(:merge)}

但它对我不起作用

【问题讨论】:

  • 我认为这是一种冒险的方法,因为哈希键是唯一的,在您的情况下,第一个和第二个数组都包含一个带有键 :frontman 的哈希。
  • @NabeelAmjad 我可以删除:frontman 我只为group_by 子句添加了它
  • 这似乎是一个纯 Ruby 问题。如果是这样,请删除 Rails 标签。拥有 Rails 标签会浪费只对 Rails 问题感兴趣的读者的时间,并可能导致只对纯 Ruby 问题感兴趣的读者跳过问题。
  • @CarySwoveland Rails 似乎对核心类有一些扩展,例如对Hash 的扩展,如果是 Ruby 问题但使用 Rails 应用程序,可以在提出解决方案时使用这些方法

标签: arrays ruby hashmap


【解决方案1】:

你可以这样使用:

first.zip(second).map { |f, s| f.merge(s) }
#=> [{:frontman=>"aaa", :category=>"bbb", :subcategory=>nil, ...}]

【讨论】:

  • 呃,看起来不错。但是,如果我在两个数组中都有不同大小的散列怎么办,或者没关系
  • @user,第一个数组的大小必须大于或等于
猜你喜欢
  • 1970-01-01
  • 2017-09-26
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多