给出这个数组:
[ ["a", ["example1"]], ["a", ["example2"]], ["b", ["example3"]] ]
希望将每个数组合并为相同的'beginning'
结果应为:
[ ["a", ["example1"], ["example2"]], ["b", ["example3"]] ]
到目前为止,我尝试了http://www.ruby-doc.org/core-2.2.0/Array.html的不同点,但我没有得到正确的条件来匹配元素彼此。
答案 0 :(得分:2)
这可以使用内置函数group_by
,map
和flatten
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"]]]