0

There are 4 arrays in Ruby

array1 = ["label1.1", "label1.2", "label1.3", "label1.4"]
array2 = ["data1.1", "data1.2", "data1.3", "data1.4"]

array3 = ["label2.1", "label2.2", "label2.3", "label2.4"]
array4 = ["data2.1", "data2.2", "data2.3", "data2.4"]

What I need to do is to get the result array of hash looking

[ {key1=>"label1.1", value1=>"data1.1" }, 
  {key1=>"label1.2", value1=>"data1.2" },
  {key1=>"label1.3", value1=>"data1.3" },
  {key1=>"label1.4", value1=>"data1.4" },

  {key1=>"label2.1", value1=>"data2.1" },
  {key1=>"label2.2", value1=>"data2.2" },
  {key1=>"label2.3", value1=>"data2.3" },
  {key1=>"label2.4", value1=>"data2.4" }
]

Your thoughts?

2 Answers2

3
(array1 + array3).zip(array2 + array4).map {|k, v| { key1: k, value1: v } }
Jörg W Mittag
  • 363,080
  • 75
  • 446
  • 653
2

Can't get any simpler and shorter than this:

your_hash = Hash[(array1 + array3).zip(array2 + array4)]

Gives you:

=> {"label1.1"=>"data1.1", "label1.2"=>"data1.2", "label1.3"=>"data1.3", "label1.4"=>"data1.4", "label2.1"=>"data2.1", "label2.2"=>"data2.2", "label2.3"=>"data2.3", "label2.4"=>"data2.4"}
dimitarvp
  • 2,316
  • 2
  • 20
  • 29
  • It doesn't give you a list of hashes with "key1" / "value1" pairs. It only gives you hash with "labelX.X" keys and "dataX.X" values. My code doesn't actually satisfy your requirement. Glad you liked it though. :) – dimitarvp Sep 01 '12 at 14:09