.net里面数组的复制

1、非零开始的2维数组复制到从零开始的2维数组
             //  源数组[1001..1003,1001..1003]
            Array array1  =  Array.CreateInstance( typeof ( object ),  new   int []  22 } new   int []  10011001 } );
            
for  ( int  i  =  array1.GetLowerBound( 0 ); i  <=  array1.GetUpperBound( 0 ); i ++ )
                
for  ( int  j  =  array1.GetLowerBound( 1 ); j  <=  array1.GetUpperBound( 1 ); j ++ )
                    array1.SetValue(
new   object (), i, j);
            
//  目标数组
             object [,] array2  =   new   object [array1.GetLength( 0 ), array1.GetLength( 1 )];
            
//  直接Copy,就这么简单,只是大家没想到
            Array.Copy(array1, array1.GetLowerBound( 0 ), array2,  0 , array1.Length);

2、同样,每个维个数一样的情况下,非零开始的2维数组之间的复制
             //  源数组[1..3,1..3]
            Array array1  =  Array.CreateInstance( typeof ( object ),  new   int []  22 } new   int []  11 } );
             for  ( int  i  =  array1.GetLowerBound( 0 ); i  <=  array1.GetUpperBound( 0 ); i ++ )
                
for  ( int  j  =  array1.GetLowerBound( 1 ); j  <=  array1.GetUpperBound( 1 ); j ++ )
                    array1.SetValue(
new   object (), i, j);
            
//  目标数组[1000..1002,1000..1002],每个维的个数一样的情况下
            Array array2  =  Array.CreateInstance( typeof ( object ),  new   int []  22 } new   int []  10001000 } );
            
//  还是直接Copy
            Array.Copy(array1, array1.GetLowerBound( 0 ), array2, array2.GetLowerBound( 0 ), array1.Length);

3、多维并且每个维数不同的情况(是不是从0开始的已经不重要了)
             //  源数组[2,3],一共6个
             int [,] array1  =   new   int [ 2 3 ];
            
int  temp  =   0 ;
            
for  ( int  i  =   0 ; i  <  array1.GetLength( 0 ); i ++ )
                
for  ( int  j  =   0 ; j  <  array1.GetLength( 1 ); j ++ )
                    array1[i, j] 
=   ++ temp;
            
//  目标数组[3,2],一共6个
             int [,] array2  =   new   int [ 3 2 ];
            
//  还是直接Copy
            Array.Copy(array1,  0 , array2,  0 , array1.Length);
看一下结果,发现array2里面是
array2[0,0]=1
array2[0,1]=2
array2[1,0]=3
array2[1,1]=4
array2[2,0]=5
array2[2,1]=6
也就是直接内存copy过去,所以,顺序还是1、2、3、4、5、6,无视每一维的长度(只要保证总长度就可以了)

你可能感兴趣的:(.net)