Ho due tipi di oggetti: M
e N
, identificabili con un nome. Inoltre, più M
s può essere raggruppato in uno o più M-Group
(identificabile anche con un nome), lo stesso per N
s. (Se ti semplifica la vita, puoi supporre che l'annidamento non è permesso, tuttavia l'annidamento sarebbe bello.)
Un Rule
è composto da più M
se più N
s. Se ho un elenco di Ms = [M(1), M(2), M(3)]
e un elenco di Ns = [N(A), N(B), N(C)]
, ho bisogno di generare un elenco di regole simile a questa:
M=1, N=A
M=2, N=A
M=3, N=A
M=1, N=B
M=2, N=B
M=3, N=B
M=1, N=C
M=2, N=C
M=3, N=C
Poiché più M
s può essere raggruppato in gruppi M, supponendo che la nostra lista Ms
sia condensata in M-Group
chiamata MG1
, il mio elenco di testo sarà simile a questo:
MG=MG1, N=A
MG=MG1, N=B
MG=MG1, N=C
Se raggruppiamo Ns
in modo simile ( NG1
), il mio elenco di regole sarà simile a questo:
MG=MG1, NG=NG1
Ovviamente questo può essere fatto abbastanza facilmente con due strati di for
loops, ma la complessità aggiuntiva dell'utente che sceglie di generare le regole con i gruppi invece del singolo M
se N
s significa che avrei bisogno per verificare se l'utente sta utilizzando un gruppo, quindi avrei bisogno di scrivere blocchiif
4% (uno per M-Group
- > N
, uno per M
- > N-Group
, uno per entrambi, e uno per nessuno dei due). Se aggiungiamo un'altra dimensione O
, allora avrei bisogno del 16% di blocchi diif
per soddisfare tutte le soluzioni, ecc.
C'è una soluzione che mi consentirà di generare questo elenco senza scrivere 2^n
if
blocchi (dove n
è la dimensione nell'array)?
(A chi si chiede: Sì, questo è nel contesto della generazione di regole di accesso al firewall)