20

Is there a way to do:

a = b.map{ |e| #return multiple elements to be added to a }

Where rather than returning a single object for each iteration to be added to a, multiple objects can be returned.

I'm currently achieving this with:

a = []
b.map{ |e| a.concat([x,y,z]) }

Is there a way to this in a single line without having to declare a = [] up front?

Undistraction
  • 42,754
  • 56
  • 195
  • 331
  • 1
    Can you give an example input and output to let us know,what you are expecting. It helps us to help you ... – Arup Rakshit Sep 14 '13 at 10:19
  • You would never use map() in your code there because each() would suffice. Your code unnecessarily creates an array that you then throw away. – 7stud Sep 14 '13 at 10:44

2 Answers2

29

Use Enumerable#flat_map

b = [0, 3, 6]
a = b.flat_map { |x| [x, x+1, x+2] }
a # => [0, 1, 2, 3, 4, 5, 6, 7, 8]
falsetru
  • 357,413
  • 63
  • 732
  • 636
0

Use Enumerable#flat_map

Which is probably not much different than:

p [1, 2, 3].map{|num| [1, 2, 3]}.flatten 

--output:-
[1, 2, 3, 1, 2, 3, 1, 2, 3]
7stud
  • 46,922
  • 14
  • 101
  • 127