Disposizione di tutte le relazioni in una matrice n-dimensionale

1

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)

    
posta tyteen4a03 09.08.2017 - 16:41
fonte

0 risposte

Leggi altre domande sui tag