2

配列に含まれるルビーに次の配列があり、配列がいくつあるか、またはそれらの長さがわからないとしましょう。以下に例を示します。

[["cat", "dog"],[1, 3, 5, 7],["morning", "afternoon", "evening"]]

私がやりたいことは、各配列から1つの値を選択し、これらの組み合わせの配列として返す結果のすべての組み合わせを持つことです。したがって、次の例では、2*4*3、つまり 24 の一意の結果が得られるはずです。

結果は次のようになります。

result = [["cat", 1, "morning"], ["cat", 1, "afternoon"], ["dog", 5, "evening"] ...]

N個の配列のリストに対してRubyでこれを行うにはどうすればよいですか? 製品とマップとインジェクションをいじってみましたが、うまくいきません。

4

2 に答える 2

4

編集a13つの配列だけでなく、配列の配列a2も扱っていることを明確にしたのでa3、ソリューションを使用するように変更しますproduct

このような?

 a1.map{|x1| a2.map{|x2| a3.map{|x3| [x1, x2, x3] }}}.flatten(2)

またはflat_map

 a1.flat_map{|x1| a2.flat_map{|x2| a3.map{|x3| [x1, x2, x3] }}}

うわー、またはただ:

 a1.product(a2,a3)

複数の配列がある場合(最初の例の3の固定数だけでなく)、次のようになります。

 input = [["cat", "dog"],[1, 3, 5, 7],["morning", "afternoon", "evening"]]
 h,*rest = input
 result = h.product(*rest)
于 2013-01-30T19:41:14.567 に答える
3

Array#product

xs[0].product(*xs.drop(1))

書きたいのですArray.product(*xs)が、Rubyにはそのようなクラスメソッドがコアにないことに注意してください(書くのは簡単ですが、おそらくそこにあるはずです)。

于 2013-01-30T19:49:24.820 に答える