You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中如何仅拷贝两个哈希共有键对应的值

Ruby 哈希按共同键拷贝值的简洁实现

你需要的「从源哈希拷贝值,仅保留两个哈希共同存在的键对应的取值」需求,不需要手动逐个键赋值,Ruby 提供了非常简洁的原生实现:

最优写法(Ruby 2.5+ 原生支持)

直接使用 Hash#slice 方法,该方法会返回原哈希中仅包含指定键的子集:

h1 = {a: 10, b: 20, c: 30}
h2 = {a: nil, c: nil}

result = h1.slice(*h2.keys)
# 运行结果:{a: 10, c: 30}

写法中h2.keys会获取h2的所有键,*是数组展开运算符,会把键数组拆成独立参数传给slice方法。不管两个哈希有多少个共同键,这行代码都不需要调整,完全没有冗余。

低版本兼容写法

如果你的Ruby版本低于2.5(没有原生Hash#slice),可以用键判断的方式实现,效果完全一致:

# 方法1:select 筛选共同键
result = h1.select { |key, _| h2.key?(key) }

# 方法2:先取两个哈希的键交集,再构造新哈希
common_keys = h1.keys & h2.keys
result = common_keys.to_h { |key| [key, h1[key]] }

注意事项

以上所有实现都遵循需求逻辑:只要键在两个哈希中同时存在,无论h2中对应键的值是nil、false还是其他内容,都会取h1中对应键的值作为结果,和示例预期完全匹配。

内容的提问来源于stack exchange,提问作者stevec

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 08:15:44