テーブルの要素のすべての組み合わせで関数を実行しようとしています。(ルアで)。テーブルと要素は変更できますが、構造は同じままです。テーブルは、その[1]が関数の最初の引数になるように編成され、以下同様に続きます。
これが私が持っているテーブルなら、
Table = {
[1] = {Player1, Player2}
[2] = {PlayerA, PlayerB, PlayerC}
[3] = {PlayerOne, PlayerTwo}
}
手動で書き出すと、おそらく次のようになります(関数の名前がExeであると仮定します)。
Exe(Player1, PlayerA, PlayerOne)
Exe(Player2, PlayerA, PlayerOne)
Exe(Player3, PlayerA, PlayerOne)
Exe(Player1, PlayerB, PlayerOne)
Exe(Player2, PlayerB, PlayerOne)
Exe(Player3, PlayerB, PlayerOne)
Exe(Player1, PlayerC, PlayerOne)
Exe(Player2, PlayerC, PlayerOne)
Exe(Player3, PlayerC, PlayerOne)
Exe(Player1, PlayerA, PlayerTwo)
Exe(Player2, PlayerA, PlayerTwo)
Exe(Player3, PlayerA, PlayerTwo)
Exe(Player1, PlayerB, PlayerTwo)
Exe(Player2, PlayerB, PlayerTwo)
Exe(Player3, PlayerB, PlayerTwo)
Exe(Player1, PlayerC, PlayerTwo)
Exe(Player2, PlayerC, PlayerTwo)
Exe(Player3, PlayerC, PlayerTwo)
しかし、私はそれを書きたくありません、そしてそれはあなたがプログラムにコピーアンドペーストしているならあなたがそれを間違っているという私の一般的な経験則を破ります。
代わりに、テーブルを調べて、考えられるすべての組み合わせを実行したいと思います。テーブルが(潜在的に)その中に任意の数のテーブルを持つことができ、またテーブル内のテーブルが潜在的に無制限の数の値を持つことができるという問題。
たとえば、テーブルは次のようになります。
Table = {
[1] = {Player1, Player2}
[2] = {PlayerA}
[3] = {PlayerOne}
}
どの実行が手動で次のようになるか:
Exe(Player1, PlayerA, PlayerOne)
Exe(Player2, PlayerA, PlayerOne)
また、テーブルは次のようになる可能性があります。
Table = {
[1] = {Player1, Player2}
[2] = {PlayerA}
[3] = {PlayerOne}
[4] = {PlayerUno, PlayerDos}
[5] = {PlayerApple, PlayerBoy, PlayerCat, PlayerDog}
}
実行は次のようになります。
Exe(Player1, PlayerA, PlayerOne, PlayerUno, PlayerApple)
Exe(Player2, PlayerA, PlayerOne, PlayerUno, PlayerApple)
Exe(Player1, PlayerA, PlayerOne, PlayerDos, PlayerApple)
Exe(Player2, PlayerA, PlayerOne, PlayerDos, PlayerApple)
Exe(Player1, PlayerA, PlayerOne, PlayerUno, PlayerBoy)
Exe(Player2, PlayerA, PlayerOne, PlayerUno, PlayerBoy)
Exe(Player1, PlayerA, PlayerOne, PlayerDos, PlayerBoy)
Exe(Player2, PlayerA, PlayerOne, PlayerDos, PlayerBoy)
Exe(Player1, PlayerA, PlayerOne, PlayerUno, PlayerCat)
Exe(Player2, PlayerA, PlayerOne, PlayerUno, PlayerCat)
Exe(Player1, PlayerA, PlayerOne, PlayerDos, PlayerCat)
Exe(Player2, PlayerA, PlayerOne, PlayerDos, PlayerCat)
Exe(Player1, PlayerA, PlayerOne, PlayerUno, PlayerDog)
Exe(Player2, PlayerA, PlayerOne, PlayerUno, PlayerDog)
Exe(Player1, PlayerA, PlayerOne, PlayerDos, PlayerDog)
Exe(Player2, PlayerA, PlayerOne, PlayerDos, PlayerDog)
ご覧のとおり、パターンを見つけました...上記の「実行」をセグメント/グループに分割することができました。たとえば、1行目と2行目に1つの変更があります。次に、それらは4行目と5行目にコピーされますが、次の変数は変更されます。
ご覧のとおり、そのパターンをコードに組み込むのに問題があります。関数の再帰が必要になると思いますが、それをどのように実行するか、または再帰するかはわかりません。...を引数として持つ関数とunpack関数を使用する必要があると思いますが、これがどのように機能するかはわかりません。
また、これが必要な理由は、手動でコピーして貼り付けるだけでなく(実際にはこれが簡単です)、テーブルのコンテンツが生成されるためです。
助けてくれませんか?