拆分哈希中的值

Splitting values in Hash

我有一个哈希格式如下:

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

当我将此数据写入 excel 时得到以下输出。

我想这样将数据写入 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"}

你能帮忙吗。

如果你可以从

修改你的原始哈希
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"}]

如果你的散列真的像这样:

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

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

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

您的哈希现在看起来像:

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

要获得所需的 table,您只需 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