2014-05-19 135 views
1

我有这两个以下阵列:如何将这两个数组组合成一个散列?

Classification.product.map{|p|[p.description, p.id]}

[["Antiques", 1], ["Art", 2], ["Auto", 3], ["Books", 4], ["Clothing & Accessories", 5], ["Collectibles/Trading Cards", 6], ["Electronics & Computers", 7], ["Event Decoration", 8], ["Furniture", 9], ["Home & Garden", 10], ["Instruments", 11], ["Kids & Baby", 12], ["Movies & Music", 13], ["Property Rentals", 14], ["Shoes/Sneakers", 15], ["Sports & Outdoors", 16], ["Tickets", 17], ["Toys & Games", 18], ["Video Games", 19], ["Other", 20]] 

Classification.service.map{|p|[p.description, p.id]}

[["Beauty", 21], ["Child Care", 22], ["Cleaning", 23], ["Computer/Technology", 24], ["Culinary", 25], ["Custom Goods", 26], ["Decorating/Interior Design", 27], ["Fashion", 28], ["Fitness", 29], ["Health/Wellbeing", 30], ["Home Improvement", 31], ["Landscaping/Yard", 32], ["Odd Jobs/Handymen", 33], ["Organizing", 34], ["Event Planning", 35], ["Pet Care", 36], ["Photography/Video", 37], ["Professional Services", 38], ["Tutoring/Instruction", 39], ["Other", 40]] 

我想要做的就是创建一个散列结果,其中每个键是一个元素第一个数组和每个值都是第二个数组中的一个元素。

因此,理想情况它会是这个样子:

{["Antiques", 1]=>["Beauty", 21], ["Art", 2]=>["Child Care", 22], etc.} 

有恰好是类别的产品和服务相等的;但是,如果它们不相等,我希望代码仍然有效。因此,如果分类比其他分类少,则应该插入空白键/值。

我该怎么做/可以做到吗?

回答

2

可以是这样做的:

Hash[ 
    Classification.product.map{|p|[p.description, p.id]}.zip(
     Classification.service.map{|p|[p.description, p.id]})] 

这是一个有点混乱,需要一行代码。最重要的有两件事我使用:

  • Hash[a]其中a是阵列,其中每个元素是具有两个元件的阵列产生的散列,其中关键是所述第一元件和值 - 第二个。

  • 拉链“拉链”两个阵列从而产生数组的数组与两个元素。

+0

此致返回一个阵列,其中键是product.description和值是service.id – Snubber

+0

它看起来像这样:{“古董” => 21,“艺术” => 22,“自动” => 23,“书籍”=> 24,“服装和配饰”=> 25,“收藏品/交易卡”=> 26,“电子和电脑”=> 27,“活动装饰”=> => 29,“家庭与花园”=> 30,“乐器”=> 31,“孩子与宝宝”=> 32,“电影与音乐”=> 33,“物业租赁”=> 34,“Shoes/Sneakers “=> 35,”Sports&Outdoors“=> 36,”Tickets“=> 37,”Toys&Games“=> 38,”Video Games“=> 39,”Other“=> 40} – Snubber

+0

@Snubber抱歉,误解了这个问题。我正在做的比我应该多 –

相关问题