1

私は複数の配列を持っています、例えば4としましょう:

a = ["a", "b", "c" ]
b = [1, 2, 3, 4]
c = ["xx", "yy"]
d = ["abc"]

配列の積を「プログレッシブ」に繰り返して、次のようにしたいと思います。

a.product(b)
a.product(b, c)
a.product(b, c, d)

配列の数が変化し、配列の積が最大になるスケーラブルな方法で実行できるようにしたいと考えていますarr0.product(arr1, arr2, arr3.......arrn)。Rubyでこれを実行する方法を誰かが理解するのを手伝ってください。前もって感謝します!

4

2 に答える 2

3
a = ["a", "b", "c" ]
b = [1, 2, 3, 4]
c = ["xx", "yy"]
d = ["abc"]

ars = [b,c,d]
p ars.each_index.flat_map{|i| a.product(*ars[0..i])}
于 2013-03-03T20:14:49.683 に答える
2

次のように抽象化できます。

def prog_product(arrs)
  x, *xs = arrs
  (1..xs.count).map(&xs.method(:take)).map do |args|
    x.product(*args)
  end
end

これにより、次のような一連のプログレッシブ製品が返されます。

[a1.product(a2), ..., a1.product(a2, ..., an)]

あなたの場合、prog_products(a, b, c, d)を返し[a.product(b), a.product(b, c), a.product(b, c, d)]ます。何らかの理由ですべての製品を1つの大きな配列にマージしたい場合は.flatten(1)、結果を求めることができます。

于 2013-03-03T20:39:17.997 に答える