2015-07-18 16 views

risposta

12

v'è alcuna operazione built-in per invertire una matrice del genere, ma è possibile utilizzare LINQ per fare l'inversione senza cicli espliciti:

var res = myJaggedArray.Select(a => a.Select(n => 1-n).ToArray()).ToArray(); 

Il trucco 1-n è un metodo comune per sostituire gli zeri con uno e uno con zeri senza utilizzare l'esecuzione condizionale.

+0

Grazie a tutti e due! – Nauzet

+6

bel trucco '1-n' :) –

+0

quello che pensate sia più veloce con cui lavorare (lopps, operazioni ecc.), Un bool [] [] o int [] []? per quanto riguarda i bitarray? – Nauzet

8

Non è disponibile alcuna funzione incorporata, ma è possibile utilizzare LINQ.

int[][] input = new[] 
{ 
    new[] { 1, 1, 1, 1 }, 
    new[] { 0, 1, 1, 0 }, 
    new[] { 1, 1, 1, 1 }, 
    new[] { 1, 0, 0, 1 } 
}; 
int[][] output = input.Select(row => row.Select(value => value == 1 ? 0 : 1).ToArray()).ToArray(); 

Per i valori logici:

bool[][] input = new[] 
{ 
    new[] { true, true, true, true }, 
    new[] { false, true, true, false }, 
    new[] { true, true, true, true }, 
    new[] { true, false, false, true } 
}; 
bool[][] output = input.Select(row => row.Select(value => !value).ToArray()).ToArray(); 
+0

Grazie a tutti e due! – Nauzet