使用子数组连接数组

时间:2015-01-23 11:46:24

标签: ruby arrays

给出这个数组:

[ ["a", ["example1"]], ["a", ["example2"]], ["b", ["example3"]] ]

希望将每个数组合并为相同的'beginning'

结果应为:

[ ["a", ["example1"], ["example2"]], ["b", ["example3"]] ]

到目前为止,我尝试了http://www.ruby-doc.org/core-2.2.0/Array.html的不同点,但我没有得到正确的条件来匹配元素彼此。

2 个答案:

答案 0 :(得分:2)

这可以使用内置函数group_bymapflatten

来完成
x = [ ["a", ["example1"]], ["a", ["example2"]], ["b", ["example3"]] ]

p x.group_by(&:first).map{|x,y|[x,y.map(&:last)].flatten(1)} #=> ["a", ["example1"], ["example2"], ["b", ["example3"]]

答案 1 :(得分:0)

我会这样做:

array = [ ["a", ["example1"]], ["a", ["example2"]], ["b", ["example3"]] ]

output = array.each_with_object(Hash.new { |h,k| h[k] = [] }) do |in_ary, hash|
  hash[in_ary.first].concat(in_ary[1..-1])
end.map { |k, v| [k, *v] }
output # => [["a", ["example1"], ["example2"]], ["b", ["example3"]]]