将数组复制到数组

时间:2017-09-06 08:40:04

标签: c# arrays copy

我对阵列有点问题。我是C#的新手。

我尝试使用

将Int数组复制到另外两个Int数组中
unsortedArray = randomNumbers();

unsortedArray2 = unsortedArray;
unsortedArray3 = unsortedArray;

但是,如果我对unsortedArray2进行排序,unsortedArray3也会被排序。

有人能帮助我吗?

6 个答案:

答案 0 :(得分:10)

  

我尝试使用

将Int数组复制到另外两个Int数组中

首先重要的是这一行:

unsortedArray2 = unsortedArray;

您不会将unsortedArray的值复制到unsortedArray2=称为assignment operator

  

赋值运算符(=)将其右侧操作数的值存储在存储位置

现在你需要知道的第二件事就是在C#Reference Types中有两种类型的对象和值类型

文档实际上解释得非常好:

  

引用类型的变量存储对其数据(对象)的引用,而值类型的变量直接包含其数据。对于引用类型,两个变量可以引用同一个对象;因此,对一个变量的操作可能会影响另一个变量引用的对象。

解决方案可以是使用Array.Copy方法。

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

CopyTo方法在这种情况下也适用

unsortedArray.CopyTo(unsortedArray2 , 0);

注意:这将起作用,因为数组的内容是值类型!如果它也是引用类型,则更改其中一个项的子值也会导致目标数组中相同项的更改。

答案 1 :(得分:1)

您可以使用Array.Copy:

unsortedArray = randomNumbers();

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

答案 2 :(得分:0)

数组是引用类型,因此当您对第一个进行排序时,神奇地对第二个进行排序。 如果你想避免必须复制你的数组(使用复制方法)。

答案 3 :(得分:0)

你正在努力解决的问题不是C#特有的。几乎在任何编程语言(JS / Java / Python / C)中,行为都是相同的。变量unsortedArray2unsortedArray3指向相同的内存块,当您重新排序数组时,您只需使用此内存块进行操作。

考虑到这一点,我们需要达到什么目标?我们需要复制数组。它可以通过多种方式完成

  1. Array.Copy
  2. 在for循环中逐个创建新数组和复制元素
  3. LINQ的

答案 4 :(得分:0)

虽然这可能无法回答您的名义问题,但是您可以使用List

List<int> unsortedArray2 = unsortedArray.ToList();

这样做意味着您不需要知道要复制的数组的大小,也不必担心它存储引用的情况,并且使用起来比说起来容易得多:

int[] unsortedArray2 = new int[unsortedArray.Length];
unsortedArray.CopyTo(unsortedArray2, 0);

答案 5 :(得分:-1)

unsortedArray = randomNumbers();

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

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

Array.Sort(unsortedArray2);