我正在尝试使用表中元素的每一个组合来执行一个函数。(在 Lua 中)。表格和元素可以更改,但结构将保持不变。该表的组织方式使得其中的 [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 行有一个变化。然后,它们被复制到第 4 行和第 5 行,但下一个变量 get 已更改。
如您所见,我无法将该模式放入代码中。我认为将需要一些函数递归,但我不知道如何将它拉下来或通过它递归。我在想我必须使用带有 ... 作为参数的函数和 unpack 函数,但我不确定这将如何工作。
此外,之所以需要这样做,而不仅仅是手动复制和粘贴它(这实际上会更容易),是因为将生成表格的内容。
你们能帮帮我吗?