2017-09-06 205 views
0

我有數組一個小問題。我是C#中的新成員。C#複製陣列到陣列

我試圖將一個int數組複製到其他2個詮釋陣列與

unsortedArray = randomNumbers(); 

unsortedArray2 = unsortedArray; 
unsortedArray3 = unsortedArray; 

但是,如果我排序unsortedArray2,該unsortedArray3太排序。

有人能幫助我嗎?

+3

Array.Copy https://msdn.microsoft.com/en-us/library/system.array.copy(v=vs.110).aspx – tym32167

+0

您可能想了解「按值傳遞」和「通過參考「瞭解爲什麼會發生這種情況。 – waka

+0

您有三個對同一個數組的引用。所以你所有的三個變量指向同一個數組。通過一個變量來操縱數組也會使變化通過其他變量可見。 – Oliver

回答

4

我嘗試複製一個int數組到另外兩個Int數組中

重要的第一件事是在這一行中:

unsortedArray2 = unsortedArray; 

您不會將unsortedArray的值複製到unsortedArray2。該=被稱爲assignment operator

賦值運算符(=)存儲在存儲位置的右側操作數的值,

現在,你需要知道的明白這第二件事現象是,目前在C#Reference Types 2種類型的對象和值類型

文檔解釋了它實際上相當不錯:

引用類型的變量存儲對其數據(對象)的引用,而值類型的變量直接包含其數據。對於引用類型,兩個變量可以引用同一個對象;因此,對一個變量的操作可能會影響另一個變量所引用的對象。

該解決方案可以使用Array.Copy方法。

Array.Copy(unsortedArray, 0, unsortedArray2 , 0, unsortedArray.Length); 

CopyTo方法也將在這種情況下工作

unsortedArray.CopyTo(unsortedArray2 , 0); 

注:這會不會起作用,因爲該數組的內容是值類型!如果它也是引用類型,則更改其中一個項目的子值也會導致目標數組中相同項目的更改。

0

陣列是一個引用類型,所以當你排序的第一個,神奇第二個已排序。 如果你想避免你必須複製你的數組(使用複製方法)。

-1
unsortedArray = randomNumbers(); 

unsortedArray2 = unsortedArray.Clone; 
unsortedArray.CopyTo(unsortedArray2, 0); 

unsortedArray3 = unsortedArray.Clone; 
unsortedArray.CopyTo(unsortedArray3, 0); 

Array.Sort(unsortedArray2); 
+2

你的回答沒有任何解釋。傾銷代碼應該如何幫助一些正在開始學習該語言的人?=! –

1

您可以使用Array.Copy:

unsortedArray = randomNumbers(); 

Array.Copy(unsortedArray, unsortedArray2 , unsortedArray.Length); 
Array.Copy(unsortedArray, unsortedArray3 , unsortedArray.Length); 
+0

「你可以使用Array.Copy:」做什麼?爲什麼這會解決問題?爲什麼問題首先出現? –

0

你正在努力的問題是不是C#具體。幾乎所有的編程語言(JS/Java/Python/C)的行爲都是一樣的。變量unsortedArray2unsortedArray3指向相同的內存塊,當你重新排序數組,你只是這個記憶件操縱。

考慮到這一點,我們需要什麼來實現你的目標是什麼?我們需要複製數組。它可以通過多種方式來實現

  1. Array.Copy
  2. 創建新的數組和複製的元素逐一進行循環
  3. 的LINQ
+0

正常我在SAP ABAP中編程,沒有數組只有表:) – ARX