ruby - 通过迭代嵌套哈希来构建新哈希

标签 ruby hash nested

所以我正在尝试重新组织来自 Google Places API 的一些数据,目前它来自他们的 API,如下所示:

{"results"=> [
             {"geometry"=>{"location"=>{"lat"=>51.503815, "lng"=>-0.11007}}, "icon"=>"http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png", "id"=>"5f212d158f4181db3ac0619fb3c52f36d4e276c2", "name"=>"Madeira Cafe", "reference"=>"CnRjAAAApaZWmTl5wOMtW49q3D1BLKAJ_M8lmZxaD6_-AU92qWfVZdokfTWOzlp5En_r9hSUHx-EeP71hzH7iDPYAGPtiqEAXvT4WcI3xlc5XUivenbQLw0j5MHW-ErL-Hbk4xB_by0OSsXCz9etNgkjbp0QCRIQ82Dgj-I3DAJqr7I3EwsFEhoUm2RXf2rCFlSuhfKjSsPuWKA2VGA",     {"results"=> [{"geometry"=>{"location"=>{"lat"=>51.503815, "lng"=>-0.11007}},
              "icon"=>"http://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png",
              "id"=>"11111111",
              "name"=>"Madeira Cafe",
              "reference"=>"xxxxx",
              "types"=>["restaurant", "food", "establishment"],
              "vicinity"=>"London"}]}

结果被放入具有一个键值的哈希中 - “结果”

其余数据嵌套在内部(我认为),“geometry” 是每个记录的第一个。

我想要得到的是一个简洁的哈希值,每个地方都有一个 ID,存储了纬度/经度和名称......这样就可以存储和查询它。

我尝试过这样的事情:

results_hash = {}
result.each do |geometry, location, id|
  results_hash[id] = geometry
end

p results_hash  

但我无法让它工作......它总是输出 nil 或只是相同的哈希值?

我希望这是有道理的,像往常一样,如果有人只是说“阅读此内容”,它仍然有很大的帮助。

谢谢!

查理

最佳答案

听起来你想要这个:

results_hash = result["results"].inject({}) { |h, res| h[res["id"]] = res["geometry"]; h }

这将为您提供以下哈希(使用 awesome_print 打印):

{
    "2d48a3306535b60663645323cdf972c320da8b9d" => {
        "location" => {
            "lng" => -0.114522,
            "lat" => 51.502653
        }
    },
    "5f212d158f4181db3ac0619fb3c52f36d4e276c2" => {
        "location" => {
            "lng" => -0.11007,
            "lat" => 51.503815
        }
    }
}

您可能希望将其格式设置得更好一些:

results_hash = result["results"].inject({}) do |h, res| 
  h[res["id"]] = res["geometry"]
  h
end

或者如果您使用的是 1.9:

results_hash = result["results"].each_with_object({}) do |res, h| 
  h[res["id"]] = res["geometry"]
end

关于ruby - 通过迭代嵌套哈希来构建新哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7149808/

相关文章:

ruby-on-rails - 调用一个新结构并获取列出的所有访问器

perl - 根据插入顺序迭代哈希?

java - 有没有更好的方法在java中编写嵌套if语句

windows - Windows环境变量嵌套的限制?

ruby - 如何从哈希创建 Ruby GraphQL InputObject 实例?

ruby - 如何在 Ruby 中通过分隔符拆分数组?

ruby-on-rails - 如果值为空意味着如何从动态属性表中删除字段?

iphone - 在 iOS 设备上本地保存游戏分数...需要安全吗?

perl - 如何解析文件、创建记录并对记录执行操作,包括术语频率和距离计算

python - 访问嵌套在字典中的值