Domanda

Come potrei realizzare la copia di una matrice irregolare ad un altro? Per esempio, ho una serie di 5x7:

0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0
0, 0, 0, 0, 0, 0, 0

e una serie di 4x3:

0,1,1,0
1,1,1,1
0,1,1,0

Mi piacerebbe essere in grado di specificare un punto di partenza specifico come (1,1) sul mio tutto di matrice pari a zero, e copiare la mia seconda serie ontop di esso in modo Vorrei avere un risultato come ad esempio:

0, 0, 0, 0, 0, 0, 0
0, 0, 1, 1, 0, 0, 0
0, 1, 1, 1, 1, 0, 0
0, 0, 1, 1, 0, 0, 0
0, 0, 0, 0, 0, 0, 0

Quale sarebbe il modo migliore per fare questo?

È stato utile?

Soluzione

A causa della natura quadrato del vostro esempio, questo sembra più adatta di una matrice 2D, invece di frastagliata. Ma in entrambi i casi, si potrebbe certamente farlo alla vecchia maniera e anello su di esso. Qualcosa di simile (non testata)

for (int i = 0; i < secondArray.Length; i++)
{
    for (int j = 0; j < secondArray[0].Length; j++)
    {
        firstArray[startingRow + i][startingColumn + j] = secondArray[i][j];
    }
}

Modifica:. come Mark, ho avuto anche un leggero miglioramento, un po 'diverso, ma seguendo le stesse linee

for (int i = 0; i < secondArray.Length; i++)
{
    secondArray[i].CopyTo(firstArray[startingRow + i], startingColumn);
}

Altri suggerimenti

Questo dovrebbe funzionare anche se gli ingressi non sono di forma rettangolare:

void copy(int[][] source, int[][] destination, int startRow, int startCol)
{
    for (int i = 0; i < source.Length; ++i)
    {
        int[] row = source[i];
        Array.Copy(row, 0, destination[i + startRow], startCol, row.Length);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top