2009-09-10 15 views
13

Szukam wyciąć dwuwymiarową tablicę w C#.Dwuwymiarowy kawałek tablicy w C#

Mam podwójne [2,2] ceny i chcę odzyskać drugi rząd tej tablicy. Próbowałem cen [1], ale mam wrażenie, że może to być coś innego.

Z góry dziękuję.

Odpowiedz

14

Nie ma bezpośredni „plaster” operacja, ale można określić metodę rozszerzenia tak:

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

Co robi' to 'w' tej tablicy T [,] '? –

+3

@Hamish Grubijan: Przekształca statyczną metodę w [metodę rozszerzenia] (http://msdn.microsoft.com/en-us/library/bb383977.aspx). – dtb

+0

Nie zgubisz tutaj indeksu 'row', ponieważ myślałem, że to powinno być 'tablica [wiersz, kolumna]'? – tsul

1

Pytanie jest, jeśli masz postrzępione lub wielowymiarowe tablicę ... oto jak pobrać wartość z albo:

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: Dodano zająć część plasterek ...

Aby uzyskać tablicę int z jednej z tych tablic, musisz zapętlić i pobrać żądane wartości. Na przykład:

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 napisał”” ... chce odzyskać drugiego rzędu ... "W twoim przykładzie, myślę, że OP chce jaggedArray [2] lub int [3], który zawiera {6,7,8} – JeffH