2016-07-12 97 views
3

我想將所有數據從二維數組的第0列移動到單獨的一維數組。我有這個至今:將某個二維數組索引下的數據移動到一維數組

for (int x = 0; x < 100; x++) { //100 is the amount of rows in the 2D array 
    array1D[x] = array2D[x, 0]; //0 is the column I want to take from 
} 

是否有更多更好/更有效的方式來達到同樣的效果?

+1

不得複製出來,而不訴諸不安全的代碼 - 如果數組是鋸齒狀,你可以切掉一列,但有一個爲沒有這樣的選擇一個矩形陣列。除非這是一個顯着的性能問題,否則恕我直言,這是不值得的。 –

+0

如果是性能問題重組數據結構可能比試圖優化特定操作帶來更多好處(這可能已經足夠接近最優化 - 在代碼運行時使用發佈版本進行優化時檢查生成的程序集)。在任何情況下 - 在更改之前測量... –

+1

備註請更新您的問題與您尋找的改進類型:代碼樣式可能會更好地問[codereview.se],性能問題需要目標+當前數字.. .. 。 –

回答

0

無法複製出列,但可以行與Buffer.BlockCopy()

class Program 
{ 
    static void FillArray(out int[,] array) 
    { 
     // 2 rows with 100 columns 
     array=new int[2, 100]; 
     for (int i=0; i<100; i++) 
     { 
      array[0, i]=i; 
      array[1, i]=100-i; 
     } 
    } 
    static void Main(string[] args) 
    { 
     int[,] array2D; 
     FillArray(out array2D); 
     var first_row=new int[100]; 
     var second_row=new int[100]; 

     int bytes=sizeof(int); 
     Buffer.BlockCopy(array2D, 0, first_row, 0, 100*bytes); 
     // 0, 1, 2, ... 
     Buffer.BlockCopy(array2D, 100*bytes, second_row, 0, 100*bytes); 
     // 100, 99, 98, .. 
    } 
}