【C#】数组深拷贝

数组是引用类型,元素保存在堆上,栈上保存的是地址。

1.Buffer.BlockCopy

public static void BlockCopy (Array src, int srcOffset, Array dst, int dstOffset, int count);
int[] arrold = new int[100000];
int[] arrnew = new int[100000];
//foreach不能修改遍历集合的元素内容,IEnumerator的Current/MoveNext()遍历元素
for(int i = 0; i < arrold.Length; ++i)
{
arrold[i] = i;
}
Stopwatch sw = new Stopwatch();
sw.Start();
Buffer.BlockCopy(arrold, 0, arrnew, 0, arrold.Length);
sw.Stop();
Console.WriteLine(sw.ElapsedMilliseconds);

这种方式理论上是效率最高的。

2.Array.Copy

Array的静态方法:

Array.Copy(oldarray, newarray, newarray.Length)
Array.Copy(oldarray, offset_oldarray,
newarray, offset_newarray, length)
//从oldarray的偏移量offset_oldarray处拷贝length个元素到newarray,从newarray的偏移量offset_newarray处。

3.Clone

只要是实现了ICloneable接口的类都可调用Clone进行拷贝。

int[] arrold = new int[100000];
int[] arrnew = new int[100000];
arrnew = arrold.Clone();

4.linq遍历

newarr = oldarry.Select(x=>x).ToArray();
posted @   徘徊彼岸花  阅读(278)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示