我試圖用表中的每個元素組合來執行一個函數。 (在Lua)。表和元素可以改變,但結構將保持不變。該表的組織方式使其[1]將成爲函數的第一個參數,依此類推。查找表中每個元素的組合(Lua/PseudoCode)
如果這是我有一個表,
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}
}
其中,exeuction最終會像..
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
是的,它從最後一個子表開始遍歷主表,將值推到'...'的前面,並在最終用完子表時調用該函數。當函數返回時,它會返回到下一個迭代的一個級別;當迭代結束時,它也回到上一個層次。 –