我有一个以下数组,显示用户信息和一些与用户相关的值。以下数组包含两个用户 Akiyo Riggs 和 Bingo 的信息
a1 = [["Akiyo Riggs", -32, "OverTime Hours", "",12],["Akiyo Riggs", -32,
"Regular Hours", "", 18],["Bingo",-12,"OverTime Hours","",14], ["Bingo",
-12,"Regular Hours","",32]]
我如何转换成以下哈希数组,其中键是用户名,值是具有相应值的哈希
[{"Akiyo Riggs"=>{"OverTime Hours"=>["", 12], "Regular Hours"=>["", 18]},
{"Bingo"=>{"OverTime Hours"=>["", 14], "Regular Hours"=>["", 32]}]
最佳答案
a1.map { |x,_,p,*ps| {x => {p => ps} } }.reduce({}, :deep_merge)
# => {"Akiyo Riggs"=>{"OverTime Hours"=>["", 12], "Regular Hours"=>["", 18]},
# "Bingo"=>{"OverTime Hours"=>["", 14], "Regular Hours"=>["", 32]}}
注意:如果考虑效率,请考虑使用 deep_merge!
而不是 deep_merge
,这样 reduce
就不会在每次迭代。
一些解释:
a1.map { |x,_,p,*ps| {x => {p => ps} } }
给我们一个像这样的散列数组
[{"Akiyo Riggs"=>{"OverTime Hours"=>["", 12]}},
{"Akiyo Riggs"=>{"Regular Hours"=>["", 18]}},
{"Bingo"=>{"OverTime Hours"=>["", 14]}},
{"Bingo"=>{"Regular Hours"=>["", 32]}}]
我们可以递归地与 ActiveSupport 合并 Hash#deep_merge
关于ruby-on-rails - 使用以下结构在 ruby 中将 Array 转换为 Hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27357610/