红宝石。合并嵌套哈希而不覆盖

2024-03-05

我有一个嵌套哈希:

{
  ["X", 1, 2, 3]=> {
    ["X", "O", 2, 3]=> {
      ["X", "O", "X", 3]=>["X", "O", "X", "O"]
    }
  }
}

我想合并给定的嵌套哈希:

{
  ["X", 1, 2, 3]=> {
    ["X", "O", 2, 3]=> {
      ["X", "O", 2, "X"] => ["X", "O", "O", "X"]
    }
  }
}

这样:

{
  ["X", 1, 2, 3]=> {
    ["X", "O", 2, 3]=> {
      ["X", "O", "X", 3]=>["X", "O", "X", "O"],
      ["X", "O", 2, "X"] => ["X", "O", "O", "X"]
    }
  }
}

最好的办法是什么?

我要合并的散列将在任意嵌套深度处具有等效键。最后一个嵌套哈希的值始终与所有其他哈希不同。


如果您确定所有重复键的值都是哈希值,则可以使用递归哈希#merge https://ruby-doc.org/core-2.2.0/Hash.html#method-i-merge与块:

def deep_merge(h1,h2)
  h1.merge(h2){|k,v1,v2| deep_merge(v1,v2) }
end

以你的例子:

{["X", 1, 2, 3]=>
  {["X", "O", 2, 3]=>
    {["X", "O", "X", 3]=>["X", "O", "X", "O"],
     ["X", "O", 2, "X"]=>["X", "O", "O", "X"]}}}

NOTE:此方法在一般情况下不起作用,并且不应用于问题中定义的结构之外的任何其他内容。它将失败deep_merge({a:1},{a:2}).

如果您没有有关嵌套键和值的信息:

def deep_merge(h1,h2)
  h1.merge(h2){|k,v1,v2| v1.is_a?(Hash) && v2.is_a?(Hash) ? deep_merge(v1,v2) : v2}
end

如果与不是两个哈希值的值发生冲突,第二个值将覆盖第一个值。

两种方法都会返回一个新的哈希值,并且不会修改 h1 或 h2。

注意:此方法可用于Rails http://apidock.com/rails/Hash/deep_merge.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

红宝石。合并嵌套哈希而不覆盖 的相关文章

随机推荐

  • 从 java.io.IOException 中提取 HTTP 状态代码

    如何 如果有的话 从 a 获取 HTTP 状态代码java io IOException in java 我假设这是关于IOException被一个抛出URLConnection 处理此问题的三种可能性 具体取决于您的限制 1 投射你的UR
  • android 中的子列表 Arraylist

    我想子列出一个数组列表并将其存储在小数组列表中 我正在执行以下操作 但无法在小数组中输入准确的值 请查看我的代码并建议其他方法或告诉我我做错了什么 ArrayList
  • Ruby 救援和重试特定代码块

    我的脚本中有以下代码 begin Loop to create 1000 emails Loop to send 1000 emails rescue Timeout Error gt e retry attempts 1 if retry
  • 单击键盘上的某个键时如何删除 JLabel?

    所以我有一个 GUI 一个 Tile 类和一个方法类 我在 Game 类中创建了四个图块 其中每个图块都包含一个字母和一种颜色 我现在想要创建一种方法 当我单击键盘上的某个键到图块上的特定字母时 它将删除 Tile 我该怎么办呢 我是否在我
  • 谁能告诉我这是什么编码?

    AAAAAAFuAAIAAAZNYWMgT1MAAAAAAAAAAAAAAAAAAAAAAAAAAADMrsHTSCsAAAALuG8NYWxleHN1Y2tzLmRpYwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  • 替换x个或更多点

    我想要一个干净的解决方案来替换文本中的点 一些标题 对此 一些标题 一些 标题 对此 一些 标题 如何用 3 个点替换每个超过 3 个点的序列 With a regular expression based search and repla
  • 将选定的文本扩展为整个单词

    在 IE 中我可以这样做 var rng document selection createRange rng expand word txt rng text 如何在 IE 之外执行相同的操作 使用 getSelection 选择整个单词
  • PyXML 安装 - 此平台上不存在 memmove

    我尝试使用 pip 安装 pyxml 库 但在安装过程中出现以下错误 extensions expat lib xmlparse c 75 2 error error memmove does not exist on this platf
  • Google 日历 API 服务帐户错误

    我收到这个错误 error errors domain calendar reason forbiddenForServiceAccounts message Service accounts cannot invite attendees
  • 在 JPA/Hibernate NamedQuery 中指定数据库函数

    如何在 JPA Hibernate NamedQuery 中指定数据库函数 奇怪的是 hibernate JQL 无法识别 RIGHT 函数 在不使用子字符串的情况下 hibernate 中是否有一种方法可以在 NamedQuery 中指定
  • 仅接受 IComparable 的 SortedList

    我有一个界面IScriptItem实现IComparable
  • Log4j 配置 - 不同的日志记录到不同的文件

    对于某些人来说 这可能是一个非常简单的问题 但就我个人而言 我发现 Log4j 配置非常困难 并且学习进行脑部手术可能不那么具有挑战性 我正在尝试让多个记录器登录到不同的文件中 这是我的 log4j properties 文件中的内容 Ro
  • Github桌面认证失败

    使用 Windows 10 Github Desktop Git 2 19 1 windows 1 64位 VisualStudio VSTS 背景 设法添加我的计算机中的存储库 但我无法用它做任何事情 我可以访问远程存储库 我之前使用过
  • Magento getUrl 不适用于目录/类别对象?

    我已经能够实例化一个类别对象来检索其名称 但是当我使用getUrl方法它不会返回类别列表页面的 URL 或任何其他内容 上面的代码会产生 HTML 输出 li a href name of sub cat a li 有谁知道我如何从
  • 黑莓 Twitter 集成以发布照片

    我正在开发一个应用程序 用户可以在运行 OS 5 0 的 BlackBerry Storm 和 Torch 系列手机上将照片分享到 Facebook 和 Twitter 对于 Facebook 我使用了草莓项目 但对于 Twitter 我找
  • 如何使用多个 CBCharacteristicProperties 和权限初始化 CBMutableCharacteristic

    我正在创建一个新的 CBMutableCharacteristic 以在我正在制作的蓝牙应用程序中使用 我从教程中得到了一些代码 如下所示 customCharacteristic CBMutableCharacteristic alloc
  • 如何在React项目中添加Service Worker

    我想在我的 React 项目中添加 Service Worker 项目已准备就绪 默认服务似乎不起作用 即使当我尝试导入它时 它也会出现以下错误 尝试导入错误 registerServiceWorker 不包含默认导出 导入为 regist
  • GWT 模块的模块标记中的 rename-to 是什么意思?

    GWT 模块中模块标记的 rename to 属性是什么意思 是可选的吗 它 导致编译器表现得好像模块的名称与长的 完全限定的名称不同 http code google com webtoolkit doc latest DevGuideO
  • 在 MySql 中提取具有特定模式的子字符串

    我有一个文本字段 如下所示 option A sum A g3et B 我想获取里面的文字 没有重复项 获得意义 A B 不可能出现双重like的情况 我知道这是一种在数据库中保存数据的可怕方法 我无法更改数据的保存方式 我只需要从本专栏中
  • 红宝石。合并嵌套哈希而不覆盖

    我有一个嵌套哈希 X 1 2 3 gt X O 2 3 gt X O X 3 gt X O X O 我想合并给定的嵌套哈希 X 1 2 3 gt X O 2 3 gt X O 2 X gt X O O X 这样 X 1 2 3 gt X O