From: walter a kehowski Date: 2005-08-11T20:06:11+09:00 Subject: cartesian product - next to last version Hello, Since the original thread got a little long, I decided to post my next to last version in a new thread. My previous version gave results like [[1,4],7] for more than two arrays when you really wanted [1,4,7]. The trick is to flatten each element of the product. The following works for any number of arrays. Of course you might want a product in which the elements of that product are arrays. Any suggestions? class Array def cartprod(b=[]) if b.empty? then #assume self an array of arrays inject {|cp,x| cp.cartprod(x) } else z = inject([]) {|a,x| b.inject(a) {|a,y| a << [x,y]}} z.collect! {|x| x.flatten } end end end a=[1,2,3] b=[4,5,6] c=[7,8,9] # works fine p [a,b,c].cartprod # doesn't work since [1,4,7,[10,11]] is [1,4,7,10,11] d=[10, [11,12]] p [a,b,c,d].cartprod