ruby-on-rails - rails/ruby 合并两个具有相同键、不同值的散列

标签 ruby-on-rails ruby hash merge

我有两个要合并的散列。它们看起来像这样:

[{"Hello"->"3"},{"Hi"->"43"},{"Hola"->"43"}]

第二个哈希看起来像:

[{"Hello"->"4"},{"Hi"->"2"},{"Bonjour"->"2"}]

我想合并这两个哈希数组,结果如下:

[{"Hello"->[{value1=>3},{value2=>4}],{"Hi"->[{value1=>43},{value2=>2}]},{"Bonjour"->[{value1=>0},{value2=>2}]},{"Hola"->[{value1=>43},{value2=>0}]]

是否有一种简单的方法来合并这两个散列,或者我是否必须单独遍历散列并在另一个散列中找到该键?

最佳答案

最简单的方法是将散列数组转换为散列:

h1 = a1.reduce(&:merge)
# => {"Hello"=>"3", "Hi"=>"43", "Hola"=>"43"}
h2 = a2.reduce(&:merge)
# => {"Hello"=>"4", "Hi"=>"2", "Bonjour"=>"2"}

然后你需要找到所有的键:

 keys = [h1, h2].flat_map(&:keys).uniq
 # => ["Hello", "Hi", "Hola", "Bonjour"]

接下来,为每个键构建值数组:

keys.map do |k| 
  {k => [{value1: h1[k] || "0"}, 
         {value2: h2[k] || "0"}]}
end
# => [{"Hello"=>[{:value1=>"3"}, {:value2=>"4"}]}, 
#     {"Hi"=>[{:value1=>"43"}, {:value2=>"2"}]}, 
#     {"Hola"=>[{:value1=>"43"}, {:value2=>"0"}]}, 
#     {"Bonjour"=>[{:value1=>"0"}, {:value2=>"2"}]}]

关于ruby-on-rails - rails/ruby 合并两个具有相同键、不同值的散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24916479/

相关文章:

ruby-on-rails - 电源服务器 : serving external domain via POW_EXT_DOMAINS

ruby-on-rails - Ruby On Rails 设计问题 : What if I make a mistake?

ruby-on-rails - 由于 Mac 上的编译器问题,无法安装 therubyracer gem?

mysql - Perl DBI fetchall_hashref

python - 如何从 auth_user django python 中选择给定用户名和哈希密码的用户

ruby-on-rails - Windows 上的 Rails : Slow?

ruby-on-rails - 在 Ruby on Rails 中,如何将 Base64 编码的字符串设置为 pdf 附件?

ruby-on-rails - 获取当前时间的单元测试代码

ruby-on-rails - 什么版本的 capybara 与 Rails 2.3 和 Ruby 1.8.7 兼容?

java - 比较 Java 中现有的数据条目