2012-06-28 56 views
2

在Processing(基於Java的語言)中,我可以這樣做;多維數組的複製子部分

int [][] a = new int[3][2]; 
for (int i = 0; i < 3; i++) 
{ 
    a[i][0] = i; 
    a[i][1] = i+3; 
} 
int [] b = a[2]; 

b是值爲2和5的一維數組。它採用數組a的第2行中的數組。

MATLAB語法將

b = a(3,:); 

是否有任何等效爲C#?我似乎無法找到任何東西,但似乎是一個相當有用和明顯的功能。

由於

回答

3

C#有multidimensional arrays,但它也有陣列數組(也叫jagged arrays)。第二種形式是你所追求的:

// This is a jagged array. It has 3 rows, each of which is an int[] in its own right. 
// Each row can also have a different number of elements from all the others, so if 
// a[i][N] is valid for some i and N, a[x][N] is not necessarily valid for other x != i 
var a = new int[3][]; 

// To populate the array you need to explicitly create an instance for each sub-array 
for (int i = 0; i < 3; i++) 
{ 
     a[i] = new[] { i, i + 3 }; 
} 

// And now this is possible: 
var b = a[2]; 

如果你手邊有一個多維數組,你需要手動做複製。

+0

啊,我看到我錯在哪裏。當使鋸齒陣列開始時,我在鋸齒陣列中指定了兩個尺寸,這產生了編譯器錯誤。我習慣於能夠指定兩者。謝謝。 – blooop

1

C#交錯數組[][])和多維數組[,])之間進行區分:

鐵血陣列:

這應該是可能的;每個數組元素本身就是一個數組。

多維數組:

在這裏,你將不得不元素做複製自己,元素。

1

除了其他答案:如果你真的想要一個副本,即你不想b[0] = 42;改變a[2][0];,那麼這樣做:

int [] b = (int[])a[2].Clone();