2016-09-27 92 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]]