ruby - 合并数组中的哈希 [ruby]

标签 ruby arrays hash merge

我有哈希数组

[{:id=>2, :price_psm=>450, :rooms_count=>3, :sq=>50, :tax_inc=>"t", :title=>"title1"},
 {:id=>2, :price_psm=>499, :rooms_count=>3, :sq=>40, :tax_inc=>"t", :title=>"title1"}, 
 {:id=>2, :price_psm=>499, :rooms_count=>3, :sq=>41, :tax_inc=>"t", :title=>"title1"}, 
 {:id=>1, :price_psm=>450, :rooms_count=>2, :sq=>20, :tax_inc=>"t", :title=>"title2"}] 

我如何合并相同的散列并创建这样的东西:

[{:id=>2, :price_psm=>[450,499,499], :rooms_count=>3, :sq=>[50,40,41], :tax_inc=>"t", :title=>"title1"}, 
 {:id=>1,  :price_psm=>450, :rooms_count=>2, :sq=>20, :tax_inc=>"t", :title=>"title2"}] 

最佳答案

类似于:

require 'pp'

INPUT = [{:id=>2, :price_psm=>450, :rooms_count=>3, :sq=>50, :tax_inc=>"t", :title=>"title1"},
        {:id=>2, :price_psm=>499, :rooms_count=>3, :sq=>40, :tax_inc=>"t", :title=>"title1"}, 
        {:id=>2, :price_psm=>499, :rooms_count=>3, :sq=>41, :tax_inc=>"t", :title=>"title1"}, 
        {:id=>1, :price_psm=>450, :rooms_count=>2, :sq=>20, :tax_inc=>"t", :title=>"title2"}] 



RES = INPUT.group_by {|row| row[:id] }.collect do |k,v|
  keys = v.collect {|rec| rec.keys}.flatten.uniq
  group = {}
  keys.each do |key|
    vals = v.collect { |rec| rec[key] }.uniq.compact
    group[key] = vals.size > 1 ? vals : vals.first
  end
  group
end

pp RES

关于ruby - 合并数组中的哈希 [ruby],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7460551/

相关文章:

ruby - 为什么拒绝不是拒绝?

javascript - 合并 2 个 JavaScript 对象数组

java - 开关内的数组

ruby - 从散列中的每个键返回前 x 个值

ruby-on-rails - 查找两个条件都为真的所有记录

Ruby - 命名约定 - 类/模块名称中首字母缩略词的字母大小写?

javascript - 将对象传递给函数时检索索引

PHP mysqli_connect : authentication method unknown to the client [caching_sha2_password]

security - 我可以使用 MD5 唯一标识多少数据(多少 MB)

ruby-on-rails - 尝试向特定用户发送邮件