首页 > 解决方案 > 遍历散列的散列将元素转换为数组

问题描述

我正在处理来自 GitHub 的 Webhook 响应。响应包含一个web_hook_response看起来像这样的哈希

{:commits=>
  {:modified=>
    ["public/en/landing_pages/dc.json",
     "draft/en/landing_pages/careers/ac123.json"]
  }
}

现在我有一个处理这个哈希的函数。

 modified_or_deleted_files = []
 web_hook_response[:commits].map do |commit|
     modified_or_deleted_files << commit[:removed] << commit[:modified]
 end

我收到这个错误

TypeError: no implicit conversion of Symbol into Integer

我试图找出commit它何时在地图块内的值,这就是打印出来的

[:modified,
 ["public/en/landing_pages/dc.json",
  "draft/en/landing_pages/careers/ac123.json"]]

为什么modified哈希转换为符号数组和地图块内的数组?我无法解释为什么会这样。谁能解释为什么会这样?

标签: ruby

解决方案


web_hook_response[:commits]是一个散列,而不是一个数组,所以当你调用map它时,block 参数commit会得到键值对,它们是大小为 2 的数组。

我认为您需要的是连接 2 个数组。你可以

modified_or_deleted_files = web_hook_response[:commits].slice(:modified, :removed).values.flatten

推荐阅读