kid*_*rax 6 ruby hash ruby-on-rails
说我有这个:
[
{ :user_id => 1, :search_id => a},
{ :user_id => 1, :search_id => b},
{ :user_id => 2, :search_id => c},
{ :user_id => 2, :search_id => d}
]
Run Code Online (Sandbox Code Playgroud)
我想最终得到:
[
{ :user_id => 1, :search_id => [a,b]},
{ :user_id => 2, :search_id => [c,d]}
]
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?
确实非常奇怪的要求.无论如何
[ { :user_id => 1, :search_id => "a"},
{ :user_id => 1, :search_id => "b"},
{ :user_id => 2, :search_id => "c"},
{ :user_id => 2, :search_id => "d"} ] \
.map{ |h| h.values_at(:user_id, :search_id) } \
.group_by(&:first) \
.map{ |k, v| { :user_id => k, :search_id => v.map(&:last) } }
Run Code Online (Sandbox Code Playgroud)