版權聲明:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/cloproad/article/details/78864266
因為數組是引用類型,所以將一個數組變量賦值給另一個數組變量后,這兩個引用會指向同一個數組對象,因此對一個數組進行改變會影響到另一個數組的結構。
而復制數組會創建一個數組的副本(淺表副本)。兩種方式:1、實例方法:a.Clone( ); 2、靜態方法:Array.Copy(...);
1、 數組的元素是值類型
對復制數組或原數組的修改不會影響到另一個數組,因為值類型的復制只是拷貝原來的值,會重新分配內存。如下:
int [] array1 = {1,2};
int [] array2 = (int [])array1.Clone();
// Clone() 返回的是object 類型,需要進行類型轉換
2、 數組的元素是引用類型
對復制數組或原數組中元素的修改會影響到另一個數組,因為數組的元素是引用類型,復制元素時只是復制了引用。如下:
// Person 類,有一個構造函數,初始化里面的姓名字段
Person [] array1 = {new Person("a"),new Person("b")};
Person [] array2 = (Person[]) array1.Clone();
另一種方法:Array.Copy(...) 比較靈活,可以部分復制
如下所示:需要原數組,目標數組,默認從0開始,復制 length長度的值,也可以自定義原數組的起始下標,目標數組的起始下標。
public static void Copy(Array sourceArray,Array destinationArray,int length)
public static void Copy(Array sourceArray,int sourceIndex,Array destinationArray,int destinationIndex,int length)
還有另外兩個重載方法,不過是將上面兩個方法的int 類型變成 long 類型。
注意:目標數組的階數要與原數組保持一致,復制長度要小於等於兩個數組的長度最小值。
int[] aa = {1,3,4,6};
int[] bb = new int [8];
Array.Copy(aa,bb,aa.Length);
// 輸出bb數組,結果是: 1,3,4,6,0,0,0,0
注意:
1.下標需要小於數組的長度
2.(復制長度 <= aa.length - 起始下標1)
3.(復制長度 <= bb.length - 起始下標2)
int[] aa = {1,3,4,6};
int[] bb = new int [8];
Array.Copy(aa,1,bb,2,3);
// 從aa數組的下標1處開始復制,復制到bb數組下標2開始的位置,復制長度是3
// 輸出bb數組,結果是: 0,0,3,4,6,0,0,0
當需要的復制數組很多並且處理方法有多個時,可以考慮使用部分數組,更加方便。C#中部分數組:點擊打開鏈接
---------------------
作者:cloproad
來源:CSDN
原文:https://blog.csdn.net/cloproad/article/details/78864266
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!