如何复制数组?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何复制数组?相关的知识,希望对你有一定的参考价值。

我正在尝试创建一个临时数组

Stack<Point[]> v = new Stack<Point[]>();
Point[] c= new Point[4];

然后将其存储在堆栈中

v.Push(c);

但每次我尝试修改数组时,它也会修改堆栈中的每个instance

c[state] = mouse;

有没有办法将其复制到堆栈中?

答案

因为数组是引用类型,所以您使用相同的实例,因此每次修改数组时,它也会修改堆栈中的每个实例。

我会创建一个新的实例数组到Stack而不是c,它可以拆分两个数组。

Stack<Point[]> v = new Stack<Point[]>();
Point[] c = new Point[4];
v.Push(new Point[4]);
c[0] = new Point(1, 1);

如果c Point[]中有一些数据,你可以尝试使用CopyTo将数据复制到另一个数组。

Stack<Point[]> v = new Stack<Point[]>();
Point[] c = new Point[4];

Point[] pushArr = new Point[c.Length];
c.CopyTo(pushArr, 0);
v.Push(pushArr);
另一答案

是。您的堆栈仅保留对数组的引用。您必须创建数组的副本。

Stack<Point[]> v = new Stack<Point[]>();
Point[] c = new Point[4];
v.Push(c);

c[0] = new Point(5, 5);
Point[] cc = new Point[c.Length];
Array.Copy(c, cc, c.Length);
cc[0] = cc[0];

c[0].X = 20;
c[0].Y = 20;
var cx = v.Pop();

Console.WriteLine(c[0]);
Console.WriteLine(cx[0]);
Console.WriteLine(cc[0]);

编辑:结果:

{X=20,Y=20}
{X=20,Y=20}
{X=5,Y=5}
另一答案

当你说:

int[] arr1=arr2; 

它不是简单地将一个变量的数据复制到另一个变量,而是存储引用。

解决我的问题的方法是:

v.Push(new Point[4]);
Point[] c = v.Last();

这里我将'c'称为我的堆栈的最后一个变量。

以前发生的事情是我将我的堆栈的每个变量都指向'c'。

以上是关于如何复制数组?的主要内容,如果未能解决你的问题,请参考以下文章

我应该如何使用 Outlook 发送代码片段?

VSCode自定义代码片段10—— 数组的响应式方法

如何将此 JavaScript 代码片段翻译成 Parenscript?

如何在Sublime Text中添加代码片段

如何从片段内的列表视图打开链接网址?

有趣的 C++ 代码片段,有啥解释吗? [复制]