テーブルの要素の組み合わせごとに関数を実行しようとしています。 (ルア語で)。表と要素は変更できますが、構造は同じままです。テーブルは、[1]がその関数の最初の引数となるように編成されています。テーブル内の要素のすべての組み合わせを見つける(Lua/PseudoCode)
これは私が持っているテーブルである場合は、
Table = {
[1] = {Player1, Player2}
[2] = {PlayerA, PlayerB, PlayerC}
[3] = {PlayerOne, PlayerTwo}
}
私は手動でそれを書いた場合、それはおそらく次のようになります(関数がエグゼ命名されていることを考えると)。
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行目などのセグメント/グループに分けることができました。次に、行4と行5にコピーされますが、次の変数getは変更されます。
ご覧のとおり、このパターンをコードに入れるのに問題があります。私はいくつかの関数の再帰が必要になると思いますが、私はそれを取り除く方法や再帰する方法がわかりません。私は...と引数をつけて関数を使用しなければならないと思っていますが、アンパック関数もありますが、これがどのように機能するかわかりません。
また、手動でコピーして貼り付けるだけでなく、実際には簡単になる理由は、テーブルのコンテンツが生成されるためです。
あなたは私を助けることができますか?
したがって、通しとして、この機能は、メインテーブル内のトップの値を取ることになる。この場合にそう: >表= { >> [1] = { 'Player1'、「Player2 '}、 >> [2] = {' PlayerA '}、 >> [3] = {' PlayerOne '} >>} それは[3]を引き出し、[2]それは[1]を引き出すだろう。 ...すべての引数が存在するまで、...部分はこれらを収容するためにゆっくりとシフトされますか? また、何も残っていないときに実行されます。それがどのように動作するか把握しようとしています... – Stormswept
はい、最後のサブテーブルから開始し、値を '...'の前に押してメインテーブルを反復し、最終的にサブテーブルを使い果たしたときに関数を呼び出します。関数が戻ると、次の反復まで1レベル上に戻ります。反復が終了すると、1つ上のレベルに戻り次のインターラクションに戻ります。 –