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

Arrays 将所有数组值转换为哈希?,arrays,ruby,hash,iteration,Arrays,Ruby,Hash,Iteration,这里是初学者问题,对不起: 我有一个名为data的数组。它由一个哈希数组I组成。映射到CSV: [ {:status=>"new", :number=>"215", :subject=>"25", :case=>"First", :attachment=>"alpha, beta"}, {:status=>"old", :number=>"213", :subject=>"21", :case=>"Second", :attachment=&

这里是初学者问题,对不起:

我有一个名为data的数组。它由一个哈希数组I组成。映射到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
但是如何将其应用于数组中的每个哈希


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

如果您想改变现有数组,我将执行以下操作:

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"]}]

您的散列有两次状态键,它们不是有效的散列。这是你的真实情况吗?@SebastianPalma,严格地说,它们是有效的(至少在Ruby 2.4.1中),这取决于什么是有效的,但是如果你对第一个散列应用任何操作,期望结果也包含重复的键,那么结果将不是预期的。结果将包含重复键的最后一个定义,就像以前的Ruby版本一样。@SebastianPalma啊,废话。我的错误-实际上是另一个键,输入两次。更改它以防止混淆,谢谢。这不会为
附件
生成所需的值,该附件是
[“alpha”,“beta”]
数组
作为单个元素,而不是单个
字符串
@engineeringsmnky,是的,我离开是作为家庭作业,所以不是作为我的工作而不是我的站点:)@Ilya谢谢!这将解决我90%的案件。我故意没有向fr索要附件的解决方案,因为我有兴趣为自己找到解决方案:))