arr = [[8765, 105191, 2.0, 1582.1 ],
[4321, 62870, 2.0, 603.24],
[1234, 62870, 2.0, 500.24]]
keys = ["sales_user_id", "user_id", "month", "sum"]
Первый способ
[keys].product(arr).map { |a| a.transpose.to_h }
#=> [{"sales_user_id"=>8765, "user_id"=>105191, "month"=>2.0, "sum"=>1582.1},
# {"sales_user_id"=>4321, "user_id"=> 62870, "month"=>2.0, "sum"=>603.24},
# {"sales_user_id"=>1234, "user_id"=> 62870, "month"=>2.0, "sum"=>500.24}]
шаги:
enum = [keys].product(arr)
#=> #<Enumerator:
# [
# [["sales_user_id", "user_id", "month", "sum"], [8765, 105191, 2.0, 1582.1]],
# [["sales_user_id", "user_id", "month", "sum"], [4321, 62870, 2.0, 603.24]],
# [["sales_user_id", "user_id", "month", "sum"], [1234, 62870, 2.0, 500.24]]
# ]:map>
a = enum.next
#=> [["sales_user_id", "user_id", "month", "sum"], [8765, 105191, 2.0, 1582.1]]
c = a.transpose
#=> [["sales_user_id", 8765], ["user_id", 105191], ["month", 2.0], ["sum", 1582.1]]
c.to_h
#=> {"sales_user_id"=>8765, "user_id"=>105191, "month"=>2.0, "sum"=>1582.1}
a = enum.next
#=> [["sales_user_id", "user_id", "month", "sum"], [4321, 62870, 2.0, 603.24]]
c = a.transpose
#=> [["sales_user_id", 4321], ["user_id", 62870], ["month", 2.0], ["sum", 603.24]]
c.to_h
#=> {"sales_user_id"=>4321, "user_id"=>62870, "month"=>2.0, "sum"=>603.24}
a = enum.next
#=> [["sales_user_id", "user_id", "month", "sum"], [1234, 62870, 2.0, 500.24]]
c = a.transpose
#=> [["sales_user_id", 1234], ["user_id", 62870], ["month", 2.0], ["sum", 500.24]]
c.to_h
#=> {"sales_user_id"=>1234, "user_id"=>62870, "month"=>2.0, "sum"=>500.24}
Второй способ
arr.map do |a|
ad = a.dup
{ "sales_user_id"=>ad.shift, "user_id"=>ad.shift, "month"=>ad.shift, "sum"=>ad.shift }
end
#=> [{"sales_user_id"=>8765, "user_id"=>105191, "month"=>2.0, "sum"=>1582.1},
# {"sales_user_id"=>4321, "user_id"=> 62870, "month"=>2.0, "sum"=>603.24},
# {"sales_user_id"=>1234, "user_id"=> 62870, "month"=>2.0, "sum"=>500.24}]
Ваш исходный массив имеет Float в третьей позиции, но ваш желаемый результат имеет значения Fixnum для 'month'. Это верно? Вы хотите конвертировать? –