我有一个看起来像这样的数组:
app.get('/content2', function (req, res) {
res.render('partials/content2');
});
现在我想从下面创建一个哈希:
data =[[01, 777], [02, 888]]
我试着这样做:
n_clip = [{"name"=>"01", "rep"=>"777"},{"name"=>"02", rep=>"888"}]
但它没有用,因为我得到了:
n_clip = []
data.each do |a|
n_clip << Array[Hash[a.map {|| ["name", a.first]}], Hash[a.map {|| ["rep", a.last]}]]
end
并且最终它不是我所期望的。
答案 0 :(得分:1)
data.map { |arr| { 'name' => arr[0], 'rep' => arr[1] } }
我宁愿使用符号作为哈希键
data.map { |arr| { name: arr[0], rep: arr[1] } }
答案 1 :(得分:1)
如果你想创建一个由两个哈希组成的数组,每个哈希都有相同的两个键,其他答案都可以。以下处理具有任意数量的键并且data
可包含任意数量的元素的情况。
def hashify(keys, arr_of_vals)
[keys].product(arr_of_vals).map { |ak,av| Hash[ak.zip(av)] }
end
keys = %w| name rep |
#=> ["name", "rep"]
arr_of_vals = [["01", "777"], ["02", "888"]]
hashify(keys, arr_of_vals)
#=> [{"name"=>"01", "rep"=>"777"}, {"name"=>"02", "rep"=>"888"}]
在您的问题中,arr_of_vals
必须首先来自[[1, 777], [02, 888]]
,但这是一个我不会解决的次要问题(相当普通)。
另一个例子:
keys = %w| name rep group |
#=> ["name", "rep", "group"]
arr_of_vals = [[1, 777, 51], [2, 888, 52], [1, 2, 53], [3, 4, 54]]
hashify(keys, arr_of_vals)
#=> [{"name"=>1, "rep"=>777, "group"=>51}, {"name"=>2, "rep"=>888, "group"=>52},
# {"name"=>1, "rep"=>2, "group"=>53}, {"name"=>3, "rep"=>4, "group"=>54}]
答案 2 :(得分:0)
data.map { |name, rep| { 'name' => name.to_s, 'rep' => rep.to_s } }