2009-09-10 14 views
13

estoy buscando para cortar una matriz bidimensional en C#.dos dimensiones matriz rebanada en C#

que tienen dobles [2,2] precios y desea recuperar la segunda fila de esta matriz. Probé los precios [1,], pero tengo la sensación de que podría ser otra cosa.

Gracias de antemano.

Respuesta

14

No hay ninguna operación directa "corte", pero se puede definir un método de extensión de esta manera:

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

¿Qué significa' 'this' hacer en este T [,] array' –

+3

@Hamish Grubijan?: convierte el método estático en un [método de extensión] (http://msdn.microsoft.com/en-us/library/bb383977.aspx). – dtb

+0

no se le extravía el índice de 'row' aquí como pensé que se debería ser 'array [row, column]'? – tsul

1

La pregunta es si usted tiene un dentado o una matriz multidimensional ... aquí es cómo recuperar un valor entre:

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: Añadido para hacer frente a la parte rebanada ...

Para obtener una matriz int de una de estas matrices, debería realizar un bucle y recuperar los valores que busca. Por ejemplo:

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 escribió"" ... desee recuperar la segunda fila ... "en su ejemplo, creo PO quiere jaggedArray [2] o un int [3] que contiene {6,7,8} – JeffH

Cuestiones relacionadas