从哈希数组中,合并特定哈希键

时间:2016-02-17 11:25:40

标签: ruby-on-rails arrays ruby hashmap

我有以下数组:

[{:a => 'b', :b => ['z', 'a', ...]}, ..., {:a => 'z', :b => ['t', 'r', ...]}]

我想获得与:b的键对应的所有数组值的合并数组,例如:

['z', 'a', 't', 'r', ... ]

:b不会包含任何重复项)

我尝试了reduce(&:deep_merge),但它似乎没有做我想要的。 Rails'魔术'的答案将是首选,但香草Ruby也会很棒并且很受欢迎。

2 个答案:

答案 0 :(得分:5)

尝试flat_map

x = [{:a => 'b', :b => ['z', 'a']}, {:a => 'z', :b => ['t', 'r']}]
x.flat_map { |e| e[:b] }
#=> ["z", "a", "t", "r"]

答案 1 :(得分:1)

您可以使用each_with_object方法:

array = [{:a=>'b',:b=>['z','a']},{:a=>'z', :b=>['t','r']}]

array.each_with_object([]) do |hash, memo|
  memo.push(*hash[:b])
end
#=> ["z", "a", "t", "r"]