2009-09-10 17 views
13

Sto cercando di suddividere una matrice bidimensionale in C#.Fusione di array bidimensionale in C#

mi hanno doppi [2,2] i prezzi e vogliono recuperare la seconda fila di questo array. Ho provato i prezzi [1,], ma ho la sensazione che potrebbe essere qualcos'altro.

Grazie in anticipo.

risposta

14

Non c'è operazione diretta "fetta", ma è possibile definire un metodo di estensione in questo modo:

public static IEnumerable<T> SliceRow<T>(this T[,] array, int row) 
{ 
    for (var i = 0; i < array.GetLength(0); i++) 
    { 
     yield return array[i, row]; 
    } 
} 

double[,] prices = ...; 

double[] secondRow = prices.SliceRow(1).ToArray(); 
+0

Cosa significa' this' fare 'questo T [,] array' –

+3

@Hamish Grubijan?: Trasforma il metodo statico in un [metodo di estensione] (http://msdn.microsoft.com/en-us/library/bb383977.aspx). – dtb

+0

Non hai sbagliato l'indice 'row' qui come pensavo che fosse dovrebbe essere 'array [row, column]'? – tsul

1

La domanda è se si dispone di un frastagliato o un array multidimensionale ... ecco come recuperare un valore da entrambi:

int[,] rectArray = new int[3,3] 
    { 
     {0,1,2} 
     {3,4,5} 
     {6,7,8} 
    }; 

int i = rectArray[2,2]; // i will be 8 

int[][] jaggedArray = new int[3][3] 
    { 
     {0,1,2} 
     {3,4,5} 
     {6,7,8} 
    }; 

    int i = jaggedArray[2][2]; //i will be 8 

EDIT: Aggiunto per affrontare la parte fetta ...

Per ottenere un array int da uno di questi array, dovresti eseguire il ciclo e recuperare i valori che stai cercando. Per esempio:

public IEnumerable<int> GetIntsFromArray(int[][] theArray) { 
    for(int i = 0; i<3; i++) { 
    yield return theArray[2][i]; // would return 6, 7 ,8 
    } 
    } 
+2

OP ha scritto"" ... vogliono recuperare la seconda fila ... "nel tuo esempio, penso che OP vuole jaggedArray [2] o un int [3] che contiene {6,7,8} – JeffH

Problemi correlati