2016-09-27 5 views
0

В настоящее время у меня есть вход [['a', [0, 1]], ['b', [1]]]. Я пытаюсь совместить первый элемент с каждым элементом в [0,1], т. Е .: 'a' в ['a',[0,1] => [['a',0],['a',1],['b',1]], как и упорядоченные пары. Я сделал это, но это кажется слишком сложным, я думал, что может быть метод, который я забыл.Добавление элемента к каждому элементу массива в ruby ​​

[[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]] 
Смежные вопросы