2
我是Ruby中的新手,我正在努力学习Ruby。我是通过哈希今天去和被困在相关问题哈希Ruby哈希创建
我有以下哈希
{"key1" => ["param_1","param_2"], "key2" => ["param_3","param_4"], "key3" => "param_5", "key4" => "param_6","key5" => ["param_7","param_8"]}
,我想上面的散列转换成以下。
{"my_hash" => [ {"name" => "key1","value" => ["param_1","param_2"]},
{"name" => "key2","value" => ["param_3","param_4"]},
{"name" => "key3","value" => ["param_5"]},
{"name" => "key4","value" => ["param_6"]},
{"name" => "key5","value" => ["param_7","param_8"]}
]
}
有人可以告诉我如何以有效的方式在Ruby中做到这一点。
注意,这个答案使用的符号,而不是字符串键,例如':name'而不是''name“'。使用符号作为键是Ruby的标准。如果您试图生成可轻松导出为[JSON](http://en.wikipedia.org/wiki/JSON)的哈希,那么您(提问者)应该只需要字符串。 –
而不是'value:v.is_a?(Array)? v:[v]',你可以使用['#to_a'](http://www.ruby-doc.org/core/Array.html#method-i-to_a),比如'value:v.to_a '。 'to_a'通过将值包装到数组中,将值转换为[Array](http://www.ruby-doc.org/core/Array.html),除非它已经是一个Array。 –
@ RoryO'Kane你不能依赖为任意对象定义的'to_a'方法。 '[v] .flatten'可能是一种更宽容的方法。 – tadman