2009-09-10 28 views
13

İki boyutlu bir diziyi C# ile dilimlemek arıyorum.İki boyutlu dizi dilimi C#

İki [2,2] fiyatım var ve bu dizinin ikinci sırasını almak istiyorum. Fiyatları denedim [1], ama başka bir şey olabileceğini hissediyorum.

Şimdiden teşekkürler.

cevap

14

Hiçbir doğrudan "dilim" işlemi, ama böyle bir uzantısı yöntemini tanımlayabilirsiniz:

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

" Bu T [,] dizisinde "ne var? –

+3

@Hamish Grubijan: Statik yöntemi bir [uzantı yöntemi] 'ne dönüştürür (http://msdn.microsoft.com/en-us/library/bb383977.aspx) – dtb

+0

Bu satırı düşündüğümden satır sırasını yanlış kullanmıyor musunuz? dizi [satır, sütun] olmalıdır? – tsul

1

soru pürüzlü veya çok boyutlu bir dizi varsa burada ... olduğunu bir değer almak için nasıl ya:

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 

DÜZENLEME: ... dilim aşamasına yönelik eklendi

Bu dizilerinden bir int dizisi elde etmek için, takip ettiğiniz değerleri dönüp almanız gerekir. Örneğin:

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 yazdı"" ... İkinci satır almak istiyorum ... "Örneğinizde, OP'nin jaggedArray [2] veya {6,7,8} içeren bir int [3] istediğini düşünüyorum. – JeffH