2009-07-08 15 views
12

voglio fare qualcosa di simile:C# assegnano 1 matrice bidimensionale di sintassi 2 matrice bidimensionale

object[] rowOfObjects = GetRow();//filled somewhere else 
object[,] tableOfObjects = new object[10,10]; 

tableOfObjects[0] = rowOfObjects; 

è questo in qualche modo possibile e ciò che è la sintassi?

o ho bisogno di fare questo:

for (int i = 0; i < rowOfObjects.Length; i++) 
{ 
    tableOfObjects[0,i] = rowOfObjects[i]; 
} 

e riempire la riga 2 array bidimensionali utilizzando un ciclo?

Grazie

risposta

7

No, se si utilizza una matrice bidimensionale che non è possibile. Devi copiare ogni elemento.

Se si utilizza una matrice irregolare, funziona bene:

// create array of arrays 
object[][] tableOfObject = new object[10][]; 
// create arrays to put in the array of arrays 
for (int i = 0; i < 10; i++) tableOfObject[i] = new object[10]; 

// get row as array 
object[] rowOfObject = GetRow(); 
// put array in array of arrays 
tableOfObjects[0] = rowOfObjects; 

Se hai trovato tutti i dati come righe, è, naturalmente, non è necessario il ciclo che mette le matrici nel array di array , come lo sostituiresti comunque.

+0

Grazie, qual è la differenza tra: oggetto [] [] tableOfObject = new object [10] [10]; e oggetto [,] tableOfObjects = new object [10,10]; Molte grazie. – m3ntat

+3

Un oggetto [,] è un array bidimensionale, è sempre rettangolare (tutte le righe hanno la stessa lunghezza). Un oggetto [] [] è un array frastagliato; una matrice di matrici object []. Poiché ogni riga è una matrice in sé, non è necessario che abbiano la stessa lunghezza. – Guffa

+0

Ah, questo ha senso. Grazie Guffa. – m3ntat

-1

Quindi, qualcosa di simile:

public static object[] GetRow() 
    { 
     object[,] test = new object[10,10]; 
     int a = 0; 
     object[] row = new object[10]; 
     for(a = 0; a <= 10; a++) 
     { 
      row[a] = test[0, a]; 
     } 
     return row; 
    } 
+0

È il contrario; ottenere elementi da una matrice bidimensionale in una matrice monodimensionale. (Inoltre, un array con la lunghezza 10 ha indice 0-9, non 0-10). – Guffa

+0

whoops, my bad, in realtà non ho eseguito il codice, lo stavo facendo solo a memoria. –

1

se ho array di dimensioni gigabyte, lo farei in C++/CLI giocare con puntatori e facendo proprio memcpy invece di avere lenti operazioni gamma di indicizzazione di confine-controllato gazillion.

8

Se la matrice è una serie di value types, è possibile.

int[,] twoD = new int[2, 2] { 
    {0,1}, 
    {2,3} 
}; 
int[] oneD = new int[2] 
    { 4, 5 }; 
int destRow = 1; 
Buffer.BlockCopy(
    oneD, // src 
    0, // srcOffset 
    twoD, // dst 
    destRow * twoD.GetLength(1) * sizeof(int), // dstOffset 
    oneD.Length * sizeof(int)); // count 
// twoD now equals 
// {0,1}, 
// {4,5} 

Non è possibile con una serie di oggetti.

Nota: poiché .net3.5 funziona solo con una matrice di primitivi.

Problemi correlati