我对阵列有点问题。我是C#的新手。
我尝试使用
将Int数组复制到另外两个Int数组中unsortedArray = randomNumbers();
unsortedArray2 = unsortedArray;
unsortedArray3 = unsortedArray;
但是,如果我对unsortedArray2进行排序,unsortedArray3也会被排序。
有人能帮助我吗?
答案 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)中,行为都是相同的。变量unsortedArray2
和unsortedArray3
指向相同的内存块,当您重新排序数组时,您只需使用此内存块进行操作。
考虑到这一点,我们需要达到什么目标?我们需要复制数组。它可以通过多种方式完成
答案 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);