哈希数组中的新哈希

kni*_*irr 0 ruby hash inject

下面的代码的目标是产生一个散列与键作为:id在散列的字段original_array,值是在所有元素original_array它们具有:id.

original_array = [
  {:id => '123', :name => 'test'},
  {:id => '123', :name => 'another test'},
  {:id => '456', :name => 'yet another test'}
]

new_hash = {}
original_array.each do |a|
  new_hash[a[:id]] = original_array.select {|x| x[:id] == a[:id]}
end
Run Code Online (Sandbox Code Playgroud)

我的代码就是这样做的,但必须有一些更好的方法来实现它,理想情况下可以在一步中创建哈希.如果有人可以建议并解释一个(希望我可以提高我对这类事情的理解),那么我们将不胜感激.

Ser*_*sev 6

这应该做到这一点

new_hash = original_array.group_by{|h| h[:id]}
Run Code Online (Sandbox Code Playgroud)

文档:可枚举#group_by.