mno*_*rt9 1 ruby arrays ruby-on-rails
array =
[ {
:keyword => "A",
:total_value => "10"
},
{
:keyword => "B",
:total_value => "5"
},
{
:keyword => "C",
:total_value => "15"
},
{
:keyword => "B",
:total_value => "6"
},
{
:keyword => "A",
:total_value => "50"
},
{
:keyword => "D",
:total_value => "40"
},
{
:keyword => "A",
:total_value => "30"
}]
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用相同的:keyword值来合并哈希值.通过合并,我的意思是结合:total_value.例如,合并后......
new_array =
[ {
:keyword => "A",
:total_value => "90"
},
{
:keyword => "B",
:total_value => "11"
},
{
:keyword => "C",
:total_value => "15"
},
{
:keyword => "D",
:total_value => "40"
}]
Run Code Online (Sandbox Code Playgroud)
注入是你的朋友:
combined_keywords = array.inject(Hash.new(0)){|acc, oh| acc[oh[:keyword]] += oh[:total_value].to_i ; acc }
Run Code Online (Sandbox Code Playgroud)
或者,each_with_object在这种情况下,该方法可能更具可读性:
combined_keywords = array.each_with_object(Hash.new(0)){|oh, newh| newh[oh[:keyword]] += oh[:total_value].to_i }
Run Code Online (Sandbox Code Playgroud)
上述两种方法在功能上是等效的.
最后,如果你真的希望它采用哈希数组样式,那么这将使你得到:
combined_keywords.collect{|(k,v)| {:keyword => k, :total_value => v}}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
186 次 |
| 最近记录: |