我有以下数组:
[{:a => 'b', :b => ['z', 'a', ...]}, ..., {:a => 'z', :b => ['t', 'r', ...]}]
我想获得与:b
的键对应的所有数组值的合并数组,例如:
['z', 'a', 't', 'r', ... ]
(:b
不会包含任何重复项)
我尝试了reduce(&:deep_merge)
,但它似乎没有做我想要的。 Rails'魔术'的答案将是首选,但香草Ruby也会很棒并且很受欢迎。
答案 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"]