下面的代码的目标是产生一个散列与键作为: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)
我的代码就是这样做的,但必须有一些更好的方法来实现它,理想情况下可以在一步中创建哈希.如果有人可以建议并解释一个(希望我可以提高我对这类事情的理解),那么我们将不胜感激.
这应该做到这一点
new_hash = original_array.group_by{|h| h[:id]}
Run Code Online (Sandbox Code Playgroud)
文档:可枚举#group_by.