Sto provando a eseguire una funzione con ogni singola combinazione di elementi da una tabella. (A Lua). La tabella e gli elementi possono cambiare, ma la struttura rimarrà la stessa. La tabella è organizzata in modo che [1] di esso sia il primo argomento della funzione, e così via e così via.Trovare ogni combinazione di elementi in una tabella (Lua/PseudoCode)
Se si tratta di una tabella che ho,
Table = {
[1] = {Player1, Player2}
[2] = {PlayerA, PlayerB, PlayerC}
[3] = {PlayerOne, PlayerTwo}
}
Se ho scritto che manualmente, sarebbe probabilmente simile a questa: (Dato che la funzione si chiama 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)
Tuttavia, non voglio scrivere che fuori, e mi si spezza il regola generale che, se stai copiando e incollando in un programma, si sta facendo male.
Quindi, invece, vorrei passare attraverso la tabella ed eseguire ogni singola combinazione possibile. Il problema in modo che la tabella possa (potenzialmente) avere un numero qualsiasi di tabelle al suo interno, e anche che la tabella all'interno della tabella possa potenzialmente avere un numero illimitato di valori.
Ad esempio, la tabella potrebbe finire per assomigliare questa:
Table = {
[1] = {Player1, Player2}
[2] = {PlayerA}
[3] = {PlayerOne}
}
In cui esecuzione finirebbe per assomigliare manualmente:
Exe(Player1, PlayerA, PlayerOne)
Exe(Player2, PlayerA, PlayerOne)
Inoltre, la tabella può finire così :
Table = {
[1] = {Player1, Player2}
[2] = {PlayerA}
[3] = {PlayerOne}
[4] = {PlayerUno, PlayerDos}
[5] = {PlayerApple, PlayerBoy, PlayerCat, PlayerDog}
}
In cui l'exeuction finirebbe come ..
Come potete vedere, ho trovato un modello ... Sono stato in grado di dividere la suddetta cosa 'Esecuzione' sopra in segmenti/gruppi, come la linea 1 e la linea 2 hanno una modifica. Quindi, vengono copiati nella riga 4 e 5, ma la variabile successiva viene modificata.
Come potete vedere, ho difficoltà a inserire questo schema in codice. Penso che sarà necessario ricorrere a una funzione di ricorsione, ma non sono sicuro di come estrarlo o di ricorrere attraverso di esso. Sto pensando che dovrò usare le funzioni con ... come gli argomenti e la funzione di decompressione, ma non sono sicuro di come funzionerebbe.
Inoltre, il motivo per cui è necessario, e non solo manualmente copiarlo e incollarlo (che in realtà sarebbe più semplice), è perché verrà generato il contenuto della tabella.
Potete aiutarmi ragazzi?
Così, come una corsa attraverso, questa funzione potrebbe estrarre il valore in alto nella tabella principale, quindi in questo caso: > Table = { >> [1] = { 'Player1', 'Player2 '}, >> [2] = {' PlayerA '}, >> [3] = {' PlayerOne '} >>} Estrarre [3], quindi estrarre [2], e che tirerebbe fuori [1]. Quindi la parte ... verrebbe lentamente spostata per sistemare questi, finché non ci saranno tutti gli argomenti? Inoltre, verrebbe eseguito quando non è rimasto nulla da estrarre, giusto? Sto solo cercando di capire come funziona ... – Stormswept
Sì, itera attraverso la tabella principale a partire dall'ultima sottotabella, spingendo i valori nella parte anteriore di '...', e chiamando la funzione quando alla fine finisce i sottotabella. Quando la funzione ritorna, torna indietro di un livello alla successiva iterazione; quando l'iterazione termina, torna anche su un livello alla successiva interation. –