哈希数组中的新哈希

时间:2014-04-01 09:04:17

标签: 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

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

1 个答案:

答案 0 :(得分:6)

这应该这样做

new_hash = original_array.group_by{|h| h[:id]}

文档:Enumerable#group_by