将键/值作为哈希数组连接?

时间:2013-08-30 08:16:28

标签: ruby arrays hash

以下代码:

product.css('.simImage').each do | product |
  product_image_url = product.xpath('.//a/img/@src').to_s
  product_hash[:product_image_url] ||= []
  product_hash[:product_image_url] << { :image_url => product_image_url }
end 

产生这样的东西:

  

[{:IMAGE_URL =&gt; “中41g2nv06iwl._sl500_ss120_.jpg”},   {:image_url =&gt;“511vczsu4pl._sl500_ss120_.jpg”}等等。]

和这段代码:

product.css('.simProductInfo').each do | product |
  product_asin = product.xpath('.//a/@href').first.value[/(?<=\/)[A-Z\d]{5,}/]
  product_hash[:product_asin] ||= []
  product_hash[:product_asin] << { :asin => product_asin }
end 

产生这样的东西:

  

[{:asin =&gt;“0744014476”,},{:asin =&gt;“B000ZKA0J6”}等等。]

我有很多像这样的方法。但他们都废弃了产品的元素并将它们放在不同的散列/符号中。我怎么能这样做,以便我可以加入他们来制作这样的东西?

  

[{:asin =&gt;“0744014476”,:image_url =&gt;“41g2nv06iwl._sl500_ss120_.jpg”,等等},{:asin =&gt;“B000ZKA0J6”,:image_url =&gt;“511vczsu4pl._sl500_ss120_ .jpg“等等}等等。]

并将该哈希数组存储在product_hash[:product]

1 个答案:

答案 0 :(得分:1)

这应该适合你。

product_hash[:product_image_url].zip(product_hash[:product_asin]).map {|arr| arr[0].merge(arr[1]) }

如果您有更多数组,请说a1, a2, a3,那么您可以

a1.zip(a2, a3).map {|arr| arr.reduce :merge }