从哈希数组中构建哈希数组

Abr*_*ram -1 ruby hash

我有以下内容:

array_of_hashes = [{"a" => 1, "b" => 2}, {"a" => 3, "b" => 4}]
Run Code Online (Sandbox Code Playgroud)

我想将其转换为:

new_hash = [{"cow" => 1, "dog" => 2}, {"cow" => 3, "dog" => 4}]
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

new_hash = {}
array_of_hashes.each do |a|
  new_hash["cow"] = a["a"]
  new_hash["dog"] = a["b"]
end
Run Code Online (Sandbox Code Playgroud)

但是,new_hash仅产生第二个哈希array_of_hashes:

new_hash = {"cow"=>3, "dog"=>4}
Run Code Online (Sandbox Code Playgroud)

对于那些需要明确说明问题的人:我如何映射array_of_hashes到get new_hash(如前两行代码中所定义)?

mea*_*gar 8

您正在将哈希数组转换为单个哈希.你错过了整个数组部分.

你要

new_array = []
array_of_hashes.each do |a|
  new_hash = {}
  new_hash["cow"] = a["a"]
  new_hash["dog"] = a["b"]
  new_array << new_hash
end
Run Code Online (Sandbox Code Playgroud)

如果你更习惯地写这个,你会产生这样的东西:

new_array = array_of_hashes.map do |hash|
  { "cow" => hash['a'], "dog" => hash['b'] }
end
Run Code Online (Sandbox Code Playgroud)