ruby - 如何合并两个哈希而不丢失值

标签 ruby hash

我有两个像这样的哈希值。

a = {foo: {first: 1}, bar: {first: 2}}
b = {foo: {second: 3}, bar: {second: 4}}

我期望 a.merge b 的结果是这样的。

{foo: {first: 1, second: 3}, bar: {first: 2, second: 4}}

但是 a.merge b 返回 {:foo=>{:second=>3}, :bar=>{:second=>4}}

如何合并两个哈希值而不丢失值?

最佳答案

如果您的散列格式始终像您指定的那样,则以下内容可行:

a = {foo: {first: 1}, bar: {first: 2}}
b = {foo: {second: 3}, bar: {second: 4}}
a.each_with_object(b) { |(k,v),x| x[k].merge!(v) }
# => {:foo=>{:second=>3, :first=>1}, :bar=>{:second=>4, :first=>2}}

否则请使用ActiveSupportdeep_merge!

关于ruby - 如何合并两个哈希而不丢失值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23464093/

相关文章:

c# - 将 SHA512 输出转换为字符串时为 "Specified value has invalid Control characters"

c# - 循环在构造函数中设置变量

C# 读回加密密码

java - 正确实现Guava的MurMurHash

c - Ruby C 扩展 - 添加系统框架

ruby-on-rails - Ruby on Rails、JSON 和 Highcharts

ruby-on-rails - 有没有办法在 Windows 机器上运行 Ruby on Rails 应用程序?

ruby-on-rails - 哪个 gem 提供 Rails 控制台?

ruby-on-rails - VIM:打开包含当前光标下函数的 ruby​​/rails 文件

ruby - RSpec:如何测试哈希数组中键的存在?