ruby - 如何修改嵌套的哈希数组
问题描述
我有以下格式的数据:
data={"services"=>[{"name"=>"foo","checks"=>["script1","script2"]},
{"name"=>"bar","checks"=>["script3"]}]}
我正在尝试将每个检查的“检查”替换为“/bin/#{check}”。我正在玩的代码是
data["services"].map! {|svc|
svc["checks"].map! {|check|
check = "/bin/#{check}"
}
}
但是这段代码替换了整个服务哈希而不是一个键,我得到:
{"services"=>[["/bin/script1", "/bin/script2"], ["/bin/script3"]]}
可以用地图吗!在...的数组哈希的深度嵌套数组中?或者我还能怎么做我需要的?
解决方案
我建议避免更改data
,只返回一个新的哈希:
new_data = data.each_with_object({}) do |(service, values), hash|
hash[service] = values.map do |value|
checks = value['checks'].map { |check| "/bin/#{check}" }
value.merge('checks' => checks)
end
end
=> {"services"=>[{"name"=>"foo", "checks"=>["/bin/script1", "/bin/script2"]}, {"name"=>"bar", "checks"=>["/bin/script3"]}]}
推荐阅读
- javascript - 如何在一组javascript代码中使用多个元素
- angular - 使用 dexie 和 angular 从 indexedDB 获取数据
- glad - 将 GLAD 包含到 VS 项目中 - 关于文件夹结构的问题
- tensorflow - 训练 VGG,准确率没有提高
- python - (编码)如何将变量放入格式化输出
- networking - Kurose 的计算机网络(自上而下的方法)TDM 电路交换 - 概念
- python - For Loop 只打印第一个值
- django - Django - 为什么当我尝试从数据库中获取数据时得到布尔结果?
- sql - 如何将多线串拆分为重叠的 2 点子集(2 点线串)?
- data-science - 使用 Orange Data Mining 堆叠模型