2016-09-27 99 views
0

我目前有一个输入[['a', [0, 1]], ['b', [1]]]。我试图将第一个项目与[0,1]中的每个元素组合在一起,即:'a'['a',[0,1] => [['a',0],['a',1],['b',1]]类似于有序对。我已经做到了,但似乎过于复杂,我认为可能有一种我忽略的方法。向红宝石中的每个数组添加元素

[[0, [0, 1]], [1, [1]]].map.with_index{|x,y| x[1].map{|ele| [y,ele]}}.flatten(1) 
#I used 'a'&'b' in the example to help with any confusion. 

回答

4
▶ arr.flat_map { |e| [e.first].product(e.last) } 
#⇒ [["a", 0], ["a", 1], ["b", 1]] 
+0

'flat_map'是根据使用的宝石,是不是? – tadman

+0

@tadman是的,确实如此。基本上,这是一个方便的'reduce'实现,因为它可以在更多的面向功能的语言中完成。 – mudasobwa

0
arr = [['a', [0, 1]], ['b', [1]]] 

arr.each_with_object([]) { |(x,a),b| a.each { |y| b << [x,y] } } 
    #=> [["a", 0], ["a", 1], ["b", 1]]