如何将这两个数组合并为一个哈希?

时间:2014-05-19 15:04:01

标签: ruby arrays hash

我有以下两个数组:

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.}

对产品和服务的分类恰好相同;但是,如果它们不相等,我希望代码仍能正常工作。因此,如果其中一个的分类少于另一个,则应插入空白键/值。

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

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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

这有点让人困惑。最重要的是,我使用了两件事:

  • Hash[a]其中a是数组,其中每个元素都是一个包含两个元素的数组,生成一个哈希,其中key是第一个元素和值 - 第二个。

  • zip" zips"因此,两个数组生成具有两个元素的数组数组。