Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 合并两个哈希_Ruby On Rails_Ruby_Api_Hash - Fatal编程技术网

Ruby on rails 合并两个哈希

Ruby on rails 合并两个哈希,ruby-on-rails,ruby,api,hash,Ruby On Rails,Ruby,Api,Hash,我正在使用谷歌公民信息API。它给了我两个哈希数组。我想在屏幕上打印来自这两方面的信息。散列1有一些整数作为k-v对(officialindice)。它们表示第二个散列中对应对象的索引号。如何将这两者合并?我想同时显示两个散列中的信息。也许最好用第二个数组中的索引哈希替换officialindice的值。谢谢你的建议 散列1: { "name" => "President of the United States", "divisionId" => "ocd-di

我正在使用谷歌公民信息API。它给了我两个哈希数组。我想在屏幕上打印来自这两方面的信息。散列1有一些整数作为k-v对(officialindice)。它们表示第二个散列中对应对象的索引号。如何将这两者合并?我想同时显示两个散列中的信息。也许最好用第二个数组中的索引哈希替换officialindice的值。谢谢你的建议

散列1:

{
  "name"       => "President of the United States",
  "divisionId" => "ocd-division/country:us",
  "levels" => ["country"],
  "roles" => ["headOfState", "headOfGovernment"],
  "officialIndices" => [0]
}
{
  "name" => "Barack Obama",
  "address" => [{
    "line1" => "The White House",
    "line2" => "1600 pennsylvania avenue nw",
    "city" => "washington",
    "state" => "DC",
    "zip" => "20500"
  }],
  "party" => "Democratic",
  "phones" => ["(202) 456-1111"],
  "urls" => ["http://www.whitehouse.gov/"],
  "photoUrl" => "http://www.whitehouse.gov/sites/default/files/imagecache/admin_official_lowres/administration-official/ao_image/president_official_portrait_hires.jpg",
  "channels" => [
    { "type" => "GooglePlus", "id" => "+whitehouse" },
    { "type" => "Facebook", "id" => "whitehouse" },
    { "type" => "Twitter", "id" => "whitehouse" },
    { "type" => "YouTube", "id" => "barackobama" }
  ]
}
散列2:

{
  "name"       => "President of the United States",
  "divisionId" => "ocd-division/country:us",
  "levels" => ["country"],
  "roles" => ["headOfState", "headOfGovernment"],
  "officialIndices" => [0]
}
{
  "name" => "Barack Obama",
  "address" => [{
    "line1" => "The White House",
    "line2" => "1600 pennsylvania avenue nw",
    "city" => "washington",
    "state" => "DC",
    "zip" => "20500"
  }],
  "party" => "Democratic",
  "phones" => ["(202) 456-1111"],
  "urls" => ["http://www.whitehouse.gov/"],
  "photoUrl" => "http://www.whitehouse.gov/sites/default/files/imagecache/admin_official_lowres/administration-official/ao_image/president_official_portrait_hires.jpg",
  "channels" => [
    { "type" => "GooglePlus", "id" => "+whitehouse" },
    { "type" => "Facebook", "id" => "whitehouse" },
    { "type" => "Twitter", "id" => "whitehouse" },
    { "type" => "YouTube", "id" => "barackobama" }
  ]
}
编辑**澄清一下,散列1是散列数组中的第一个散列。哈希2是哈希数组中的第一个哈希。我想用散列2替换散列1中officialIndice中的数字。这让我很困惑,因为有些药剂师有不止一个数字。希望这是有道理的

您可以使用
散列#合并
合并两个散列中的信息。但是,两者中都有重叠的键(
名称
),因此在合并之前,您需要将其重命名为哈希:

# Rename "name" to "position_name" before merging to prevent collision
hash1["position_name"] = hash1.delete("name")

merged_hash = hash1.merge(hash2)
可以与块一起使用:

foo = { "name" => "President of the United States" }
bar = { "name" => "Barack Obama" }

foo.merge(bar) { |key, old_val, new_val| {description: old_val, value: new_val} }
=> {"name"=>{:description=>"President of the United States", 
             :value=>"Barack Obama"}}

因此,您可以通过这种方式指定
merge
逻辑。如果您有多个具有类似逻辑的重叠键,此解决方案将有效。

合并将不起作用;如果
officialindice
有多个元素,您会怎么做

array1.each do |el1|
  el1["officials"] = el1["officialIndices"].map { |idx|
    array2[idx]
  }
  el1.delete("officialIndices")
end

(注意:这是破坏性的,即它将更改
array1
。如果您希望
array1
不变,我将重写。)

您说,“这些表示第二个哈希中对应对象的索引号。”什么是“对应对象”?该索引如何用于构建合并哈希?请编辑以澄清并显示示例所需的合并哈希。谢谢。那是真的,但我不是很清楚。哈希1是哈希数组中的第一个哈希。哈希2是哈希数组中的第一个哈希。我想把这两个散列中的信息合并起来。我可以通过将officialIndice插入第二个数组来实现这一点。officialIndice代表第二个散列的索引号。我建议
el1[“officialIndice”]=array2.values\u在(*el1[“officialIndice”])
。你擅离职守了。