Arrays 数组中的散列

Arrays 数组中的散列,arrays,ruby,hash,Arrays,Ruby,Hash,我有这个杂烩: {"id" => [323, 324], info => ["Test Info", "Test Info2"]} 我希望在数组中包含如下哈希: array = [ [{"id" => "323", info => "Test Info"}], [{"id" => "324", info => "Test Info2"}] ] 我有重复的数据。我需要在id和info上使用uniq,以仅获取每个id一次。因此,我需要在以后加入他们。您

我有这个杂烩:

{"id" => [323, 324], info => ["Test Info", "Test Info2"]}
我希望在数组中包含如下哈希:

array = [
  [{"id" => "323", info => "Test Info"}],
  [{"id" => "324", info => "Test Info2"}]
]
我有重复的数据。我需要在
id
info
上使用
uniq
,以仅获取每个
id
一次。因此,我需要在以后加入他们。

您可以使用此解决方案(在本例中可能是这样)

如果要将每个嵌套散列包装到它自己的数组中,则需要执行另一个操作:

h.map { |k, v| [k].product v }.transpose.map(&:to_h).map { |e| [e] }

#⇒ [
#  [0] [
#    [0] {
#        "id" => 323,
#      "info" => "Test Info"
#    }
#  ],
#  [1] [
#    [0] {
#        "id" => 324,
#      "info" => "Test Info2"
#    }
#  ]
# ]
这看起来像是一个将两个阵列压缩在一起的作业:

hash = {
  "id" => [323, 324],
  "info" => ["Test Info", "Test Info2"]
}

keys = %w[ id info ]

array = hash['id'].zip(hash['info']).map do |id, info|
  Hash[keys.zip(pair)]
end

# => [{"id"=>323, "info"=>"Test Info"}, {"id"=>324, "info"=>"Test Info2"}]

该方法用于将形式为
[[['a',1],'b',2]]
的数组转换为形式为
{'a'=>1,'b'=>2}

的散列

h = {"id" => [323, 324], "info" => ["Test Info", "Test Info2"]}

da_keys = h.keys
h.values.transpose.each_with_object([]) { |a,b| b << da_keys.zip(a).to_h }
  #=> [{"id"=>323, "info"=>"Test Info"}, {"id"=>324, "info"=>"Test Info2"}] 

rolling_keys = h.keys.cycle
h.values.transpose.map {|a| a.each_with_object({}) {|v,g| g.update(rolling_keys.next=>v)}}
  #=> [{"id"=>323, "info"=>"Test Info"}, {"id"=>324, "info"=>"Test Info2"}] 
h={“id”=>[323324],“info”=>[“测试信息”,“测试信息2”]}
DAU键=h键
h、 值。转置。每个_与_对象([]){a,b | b[{“id”=>323,“info”=>“Test info”},{“id”=>324,“info”=>Test Info2}]
滚动键=h键。循环
h、 values.transpose.map{| a | a.each_with_object({}){| v,g | g.update(rolling_keys.next=>v)}
#=>[{“id”=>323,“信息”=>“测试信息”},{“id”=>324,“信息”=>“测试信息2”}]
您要求这样做:

array = [
  [{"id" => "323", info => "Test Info"}],
  [{"id" => "324", info => "Test Info2"}]
]
但我想你真正想要的是:

array = [
  {"id" => "323", "info" => "Test Info"},
  {"id" => "324", "info" => "Test Info2"}
]
鉴于此:

h = {"id" => [323, 324], "info" => ["Test Info", "Test Info2"]}
您可以这样做:

h.map { |k,l| l.map { |v| [ k,v ] } }.reduce(&:zip).map(&:to_h)
“我有重复的数据”-显示出来!“因此,我以后需要加入它们”-你确定吗?从一个数组(已加入的数组)中删除重复数据似乎更容易。说到“一个数组”-你真的希望散列嵌套在另一个数组中的数组中吗?这似乎太高了一级。
h = {"id" => [323, 324], "info" => ["Test Info", "Test Info2"]}
h.map { |k,l| l.map { |v| [ k,v ] } }.reduce(&:zip).map(&:to_h)