在Hash中拆分值

时间:2016-12-21 10:54:39

标签: ruby-on-rails ruby ruby-on-rails-3

我有以下格式的哈希:

{"PPS_Id"=>["fe4d7c06-215a-48a7-966d-19ab58976548", "6e90208e-4ab2-4d44-bbaa-9a874bff095b"], "Amount"=>"[\"10000.000\", \"2374.000\"]"}

当我将此数据写入excel时,请获取以下输出。

enter image description here 我想以这种方式将数据写入Excel:

PPS_Id                                     Amount
fe4d7c06-215a-48a7-966d-19ab58976548       10000.000
6e90208e-4ab2-4d44-bbaa-9a874bff095b       2374.000

如何将当前的哈希值转换为以下值?

{PPS_Id"=>["fe4d7c06-215a-48a7-966d-19ab58976548","Amount"=>"10000.000"},{PPS_Id"=>["6e90208e-4ab2-4d44-bbaa-9a874bff095b","Amount"=>"2374.000"}

你能帮忙吗。

2 个答案:

答案 0 :(得分:1)

如果您可以从

修改原始哈希值
hash = {"PPS_Id"=>["fe4d7c06-215a-48a7-966d-19ab58976548", "6e90208e-4ab2-4d44-bbaa-9a874bff095b"], "Amount"=>"[\"10000.000\", \"2374.000\"]"}

hash = {"PPS_Id"=>["fe4d7c06-215a-48a7-966d-19ab58976548", "6e90208e-4ab2-4d44-bbaa-9a874bff095b"], "Amount"=>["10000.000", "2374.000"]}

注意:哈希中的最后一个值是Array而不是String

然后,您可以生成一个哈希数组,您可以在其上迭代以填充您的Excel:

ary = hash.inject([]) do |r, (key, value)|
  value.each_with_index do |e, i|
    r[i] ||= {}
    r[i][key] = e
  end
  r
end

ary     # [{"PPS_Id"=>"fe4d7c06-215a-48a7-966d-19ab58976548", "Amount"=>"10000.000"}, {"PPS_Id"=>"6e90208e-4ab2-4d44-bbaa-9a874bff095b", "Amount"=>"2374.000"}]

答案 1 :(得分:1)

如果您的哈希看起来像这样:

hash = {"PPS_Id"=>["fe4d7c06-215a-48a7-966d-19ab58976548", "6e90208e-4ab2-4d44-bbaa-9a874bff095b"],
        "Amount"=>"[\"10000.000\", \"2374.000\"]"}

您可以先使用scan来解析浮点数:

hash["Amount"] = hash["Amount"].scan(/[\d\-\.]+/)

您的哈希现在看起来像:

{"PPS_Id"=>["fe4d7c06-215a-48a7-966d-19ab58976548", "6e90208e-4ab2-4d44-bbaa-9a874bff095b"],
 "Amount"=>["10000.000", "2374.000"]}

要获得所需的表格,您只需transpose哈希值:

hash.values_at("PPS_Id", "Amount").transpose.each{|id, amount|
  puts format("%s\t%.3f", id, amount)
}

将输出:

fe4d7c06-215a-48a7-966d-19ab58976548    10000.000
6e90208e-4ab2-4d44-bbaa-9a874bff095b    2374.000