2013-08-30 33 views
-2

以下代码:将键/值作为哈希数组加入?

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 => “41g2nv06iwl._sl500_ss120_.jpg”},{ :IMAGE_URL =>“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 => “0744014476”,},{:ASIN => “B000ZKA0J6”},等等,等等]

我有许多像这样的方法。但是它们都会放弃产品的元素,并将它们放置在不同的散列/符号中。我怎么能这样做,以便我可以加入他们产生这样的事情?

[{:ASIN => “0744014476”,:IMAGE_URL => “41g2nv06iwl._sl500_ss120_.jpg” 等},{:ASIN => “B000ZKA0J6”:IMAGE_URL =>“511vczsu4pl._sl500_ss120_。 jpg“等)等等]

并将该散列数组存储在product_hash[:product]

+0

给相关的HTML太..请..不看同样可能不能给你很好的建议.. –

回答

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 } 
+0

非常感谢!顺便说一句,如果我想在将来添加更多的数组,我该怎么做?超过一个? – alexchenco

+0

我已更新我的回答 – Santhosh

+0

非常感谢!完美工作。 – alexchenco