2016-09-27 7 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]] 
関連する問題