将所有数组值转换为哈希值?

时间:2018-01-15 11:30:02

标签: arrays ruby hash iteration

初学者问题,抱歉:

我有一个名为data的数组。它由一系列哈希组成,我用CSV格式映射:

[
{:status=>"new", :number=>"215", :subject=>"25", :case=>"First", :attachment=>"alpha, beta"},
{:status=>"old", :number=>"213", :subject=>"21", :case=>"Second", :attachment=>"alpha, beta"}
]

我想将哈希发布到API,但是这个API期望所有值都是数组(因为它们都可能包含多个值)。 如何将所有哈希值转换为数组? 预期结果如下:

[
{:status=>["new"], :number=>["215"], :subject=>["25"], :case=>["First"], :attachment=>["alpha", "beta"]}
{:status=>["old"], :number=>["213"], :subject=>["21"], :case=>["Second"], :attachment=>["alpha", "beta"]}
]

我知道我能做到:

hashed_data[0].map { |k, v| [ k,[v] ] }.to_h

但是如何将其应用于数组中的每个哈希?

在这种情况下,我不能直接调用:附件,因为它不会总是以相同的方式命名。

1 个答案:

答案 0 :(得分:2)

如果你想改变现有数组,我会做类似的事情:

array.each {|e| e.transform_values! {|value| Array(value)} }
#=> [{:status=>["25"], :number=>["215"], :case=>["First"], :attachment=>["alpha, beta"]}, 
#    {:status=>["21"], :number=>["213"], :case=>["Second"], :attachment=>["alpha, beta"]}]