首页 > 编程语言 >【C#】数组深拷贝

【C#】数组深拷贝

时间:2023-05-07 17:56:21浏览次数:33  
标签:C# oldarray int newarray 数组 offset new 拷贝 arrold

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

1.Buffer.BlockCopy

int[] arrold = new int[100000];
int[] arrnew = new int[100000];

//foreach不能修改遍历集合的元素内容
for(int i = 0; i < arrold.Length; ++i)
{
    arrold[i] = i;
}

Stopwatch sw = new Stopwatch();
sw.Start();
Buffer.BlockCopy(oldarray, newarray, newarray.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();

标签:C#,oldarray,int,newarray,数组,offset,new,拷贝,arrold
From: https://www.cnblogs.com/wk2522466153/p/17379508.html

相关文章

  • LeetCode 349. 两个数组的交集
    题目链接:LeetCode349.两个数组的交集题意:本题题意是让我们找出两个数组中的交集,注意交集中不能出现重复元素解题思路:思路比较常规,先遍历数组num1,对于每个首次出现的数字,对应位置上的数值+1,再遍历数组num2,判断当前数字是否在num1中出现,如果出现,就加入到结果集中完整代码如......
  • LeetCode 242. 有效的字母异位词
    题目链接:LeetCode242.有效的字母异位词题意:本题是要判断两个字符串s和t,是否是字母异位词,所谓字母异位次就是如果s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。解题思路:首先我们很容易想到,最简单的思路就是先遍历一遍s字符串,统计出每个字母出现的次数......
  • 交换机重置console口密码
    1、通过Console口连接华为交换机,手动重启交换机。2、界面出现BIOS LADING...,按下快捷键“Ctrl+B”并输入BootROM/BootLoad密码,进入BootROM/BootLoad主菜单。3、初始密码:[email protected]  A必须大写。4、选择7 Clearpasswordforconsoleuser 清除console用户密码模式......
  • 转行去做人工智能之 初试C语言
    C语言学习大纲:C语言基础变量、数据类型、运算符控制流语句(if、for、while)函数数组、指针C语言进阶结构体动态内存分配文件操作预处理器C语言高级特性多线程编程指针高级应用系统编程推荐学习资源:https://github.com/moocstudent/c_mooc_learning_from_w......
  • etcd:增加30%的写入性能
    etcd:增加30%的写入性能本文最终的解决方式很简单,就是将现有卷升级为支持更高IOPS的卷,但解决问题的过程值得推荐。译自:etcd:getting30%morewrite/s我们的团队看管着大约30套自建的Kubernetes集群,最近需要针对etcd集群进行性能分析。每个etcd集群有5个成员,实例型号为m6i.xla......
  • 【web 开发基础】PHP 中数组的定义和使用
    前言在PHP中定义数组非常灵活。与其他许多编程语言中的数组不同,PHP不需要在创建数组时指定数组的大小和类型,甚至无需再使用数组前先行声明,也可以在同一个数组中存储任何类型的数据,PHP支持一维和多维数组,可以由用户创建,也可以由一些特定的数据库处理函数从数据库查询中生成数组,或者......
  • MyCat05——基于Docker搭建MySQL主从复制
    1安装mysql的镜像如果服务器较少,为了充分发挥现有服务器的利用率,可以使用容器化技术来安装mysql。如果服务器没有docker,需要先安装dockeryuminstall-ydockerdocker安装后,启动服务servicedockerstart下载mysql5.7版本的docker镜像dockerpullmysql:5.72启动mysql服务启动......
  • scandir,major和minor,state,无锁机制----比较交换CAS Compare And Swap,dirent,sprintf,fop
    文章目录1.Linuxc目录操作函数scandir2.Linux系统设备(device)的major和minornumber3.state4.无锁机制----比较交换CASCompareAndSwap5.dirent6.sprintf7.fopen8.atoi函数9.strtok10.strtol1.Linuxc目录操作函数scandir(1)头文件:#include<dirent.h>定义函数:intscandir(......
  • (第26章)LinuxC本质中链表、二叉树和哈希表
    文章目录一、单链表的结构决定只能出栈,入栈1.链表的结构2.链表与数组的区别3.单链表所有基本操作代码(1)链表的插入(2)链表的查找(3)链表的删除(3)遍历整个链表(4)销毁整个链表4.习题5.C++NULL指针二、双向链表结构决定可以出队和入队1.在上面的单项链表上改改,得到双向链表2.改进双向链表:新增......
  • Cesium:设置加载时的初始视角
    先选好位置,并调整好视角,然后按F12打开控制台分别输入:viewer.camera.positionviewer.camera.headingviewer.camera.pitchviewer.camera.roll来分别获取你选好的位置的坐标,视角等信息,然后利用viewer.camera.setView进行设置。viewer.camera.setView({//Cesium的坐......