首页 > 其他分享 >数组和集合的复制方法

数组和集合的复制方法

时间:2023-04-19 12:13:15浏览次数:48  
标签:Console WriteLine array2 array1 复制 数组 集合 Join String

由于数组和集合都是引用类型,

当把一个数组array1赋值给另一个数组array2时,并不是真正将array1的值赋值给array2,而是将array1的指针赋值给array2。

由此造成当修改array2中的数据时,array1中的数据也会相应修改。

如何将array1中的数据赋值给array2,并且让两个数组是独立的,修改数据时不会相互影响。

有以下4种方法:

        //使用clone方法复制
        private void button2_Click(object sender, EventArgs e)
        {
            array2 = (int[])array1.Clone();
            array2[2] = 200;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }

        //使用linq方法
        private void button3_Click(object sender, EventArgs e)
        {
            array2 = array1.Select(x => x).ToArray();
            array2[2] = 300;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }

        //使用Array.Copy()方法
        private void button4_Click(object sender, EventArgs e)
        {
            Array.Copy(array1, 0, array2, 0, array2.Length);
            array2[2] = 400;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }

        //使用Buffer.BlockCopy()方法
        private void button5_Click(object sender, EventArgs e)
        {
            Buffer.BlockCopy(array1, 0, array2, 0, array2.Length);
            array2[2] = 500;
            Console.WriteLine("array1:" + String.Join(",", array1));
            Console.WriteLine("array2:" + String.Join(",", array2));
        }

对于list类型,可以采用以下方法:(备注,以下方法由chatgpt生成)

可以使用List<T>类的构造函数或AddRange方法来实现此目的。

方法1:使用构造函数

csharp
var originalList = new List<int> { 1, 2, 3 };
var copiedList = new List<int>(originalList); // 使用原始列表初始化新的列表

copiedList.Add(4); // 在复制后的列表中添加一个元素
Console.WriteLine(string.Join(", ", originalList)); // 输出 "1, 2, 3"
Console.WriteLine(string.Join(", ", copiedList)); // 输出 "1, 2, 3, 4"
方法2:使用AddRange方法

csharp
var originalList = new List<int> { 1, 2, 3 };
var copiedList = new List<int>();

copiedList.AddRange(originalList); // 将原始列表中的所有元素添加到新列表中

copiedList.Add(4); // 在复制后的列表中添加一个元素
Console.WriteLine(string.Join(", ", originalList)); // 输出 "1, 2, 3"
Console.WriteLine(string.Join(", ", copiedList)); // 输出 "1, 2, 3, 4"
无论选择哪种方法,对复制后的列表进行修改都不会影响原始列表的数据。

 

标签:Console,WriteLine,array2,array1,复制,数组,集合,Join,String
From: https://www.cnblogs.com/hanzq/p/17332890.html

相关文章

  • 【每日一题】分隔数组以得到最大和
    1043.分隔数组以得到最大和关键词:动态规划、递归题目来源:1043.分隔数组以得到最大和-力扣(Leetcode)题目描述T动态规划T递归给你一个整数数组arr,请你将该数组分隔为长度最多为k的一些(连续)子数组。分隔完成后,每个子数组的中的所有值都会变为该子数组中的最大值。......
  • python多进程-多元数组
    多进程分配数组任务,并原地修改frommultiprocessingimportPool,Manager,cpu_countimportnumpyasnpimporttimedeffunc(i,j):#wait100stime.sleep(0.5)returni+jif__name__=='__main__':mat=np.zeros((10,10)).tolist()po......
  • C语言 正确理解二维数组首地址
    在一维数组中,数组名表示的是数组第一个元素的地址inta[10],*p=a;那么二维数组呢inta[3][4],a表示的是元素a[0][0]的地址吗?不是!二维数组就是一维数组,二维数组a[3][4]就是有三个元素a[0]、a[1]、a[2]的一维数组,所以数组a的第一个元素不是a[0][0],而是a[0],所以数组名......
  • 小程序打印小票,复制功能,自定义导航栏
    //复制联系地址fnCopyAddress(){wx.setClipboardData({data:this.data.detailInfo.address,success:res=>{Util.errorShow('复制联系地址成功')}})},//打印小票fnPrintTicket(){let_this=this;......
  • 关于大数乘法的数组类型问题(int 还是char)
    可以知道在处理高精度乘法的时候,我们是不考虑当场进位的,在所有位数都模拟完竖式乘法后才进行逐位进位,这就要求存储每个位的数组保证不会爆掉溢出众所周知char类型最多只能存储到255,非常非常容易溢出成负数,对于char型数组要考虑每一步乘法都要进位。而int型数组最大21亿就不用考......
  • #yyds干货盘点# LeetCode面试题:删除有序数组中的重复项 II
    1.简述:给你一个有序数组nums,请你原地删除重复出现的元素,使得出现次数超过两次的元素只出现两次,返回删除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。 说明:为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数......
  • Redis高级 哈希类型、列表类型、集合类型、有序集合(zset)、慢查询、pipeline与事务
    哈希类型###1---hget,hset,hdelhgetkeyfield#获取hashkey对应的field的value时间复杂度为o(1)hsetkeyfieldvalue#设置hashkey对应的field的value值时间复杂度为o(1)hdelkeyfield#删除hashkey对应的field的值时间复杂度为o(1)#测试hsetuser:1:infoage......
  • 【Redis】哈希类型 列表类型 集合类型 有序集合 慢查询 pipeline与事务 发布订阅 Bitm
    目录昨日回顾今日内容1哈希类型2列表类型3集合类型4有序集合(zset)5慢查询6pipeline与事务7发布订阅8Bitmap位图9HyperLogLog作业昨日回顾#1redis介绍 -特性#速度快:10wops(每秒10w读写),数据存在内存中,c语言实现,单线程模型#持久化:rdb和aof#多种数据结......
  • Redis---主从复制
    一、redis主从复制主从复制:是存储数据的服务结构主服务器:接受客户端连接的服务器从服务器:自动与主服务器保持数据一致的服务器配置主从复制1、环境准备主服务器主机名:masterIP地址:192.168.11.101/24从服务器主机名:node01IP地址:192.168.11.102/24客户......
  • redis 二、(哈希类型,列表类型,集合类型,有序集合,pipline机制,发布订阅,bitmap位图,HyperLogL
    目录Redis一、哈希类型二、列表类型三、集合类型四、有序集合五、慢查询六、pipline与事务七、发布订阅八、bitmap位图九、HyperLogLogRedis一、哈希类型###1---hget,hset,hdelhgetkeyfield#获取hashkey对应的field的value时间复杂度为o(1)hsetkeyfieldvalue#设......