从本质上讲,我只想合并出现在两个散列中的键. 最终目标是将这些值相加或相乘.

hash1 = {"a" => 1, "b" => 2, "c" => 3 }
hash2 = {"a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5}
{"a" => 2, "b" => 4, "c" => 6 }

这在某种意义上是通过添加正确的值来实现的,但是也返回了d和e.

hash1.merge(hash2) { |key1, value1, value2| value1 + value2 }
#=> {"a" => 2, "b" => 4, "c" => 6, "d" => 4, "e" => 5}

推荐答案

try 下面的代码

hash1 = {"a" => 1, "b" => 2, "c" => 3 }
hash2 = {"a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5}


(hash1.keys & hash2.keys).map{ |key| [key, hash1[key] + hash2[key]]}.to_h
 => {"a"=>2, "b"=>4, "c"=>6} 

Ruby相关问答推荐

如何保证散列中的对象不完全相同

这是按引用传递/值传递的误解,导致此方法无法按预期输出吗?

确保 Capybara 不存在元素

define_method:如何动态创建带参数的方法

给url添加参数

Ruby访问嵌套函数中的外部变量

如何期望 RSpec should_receive 的一些(但不是全部)参数?

如何使用 if..else 块的结果分配变量?

在 Ruby 中,获取第一个块返回 true 的可枚举元素的最快方法是什么?

`require': no such file to load in ruby

如何在控制台中禁用 MongoDB 日志(log)消息?

Ruby:module、require和include

如何删除Ruby中数组中满足条件的所有元素?

include_examples和it_behaves_like有什么区别?

如何在 Ruby 中创建可重用的块/proc/lambda?

带有可选参数的方法

使用 `?`(问号)在 Ruby 中获取 ASCII 字符代码失败

是否有更简单的(单行)语法来别名一个类方法?

将 CSV 文件转换为哈希数组

Ruby:如何将数组数组连接成一个