首先应该理解数组在《数据结构》中的概念,数组是一个线性表,在定义的时候由内存分配一个指定大小的内存空间,所以相较于链表(C#中又叫集合)缺点就是不利于扩展。
针对合并两个数组的方法就是创建一个新的数组(大于两个数组的大小之和)来存放两个数组,在没有用到Array.Copy()这个又C#程序集提供的方法时,我们只能将数组中元素一个一个依次放入新数组中,如下所示

  /// <summary>/// 将数组a,b进行合并/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <param name="c"></param>private static byte[] Combine(byte[] a, byte[] b){byte[] c = new byte[a.Length + b.Length];for (int i = 0; i < a.Length; i++){c[i] = a[i];}for (int j = a.Length; j < a.Length+ b.Length; j++){c[j] = b[j];}return c;}

这个方法写法上没什么问题,但有一个严重的问题,在数据量较大的时候,相较于Array.Copy效率极低
同时也不如Array.Copy()一行代码来的简洁。如下所示

  /// <summary>/// 将数组a,b进行合并/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <param name="c"></param>private static byte[] Combine2(byte[] a, byte[] b){byte[] c = new byte[a.Length + b.Length];Array.Copy(a, 0, c, 0, a.Length);Array.Copy(b, 0, c, a.Length, b.Length);return c;}

效率比较
1将两个长度为50000的数组进行合并

using System;
using System.Collections.Generic;
using System.Text;namespace ArrayCopyTest
{class Program{static void Main(string[] args){//使用两个长度为50000的数组byte[] a = new byte[50000];byte[] b = new byte[50000];#region 对a,b进行随机赋值Random random = new Random();for (int i = 0; i < a.Length; i++){a[i] = (byte)random.Next(0, 255);}for (int i = 0; i < b.Length; i++){b[i] = (byte)random.Next(0, 255);}#endregionConsole.WriteLine("开始记录时间");DateTime beforDT = DateTime.Now;//记录开始时间byte[] c1 = Combine1(a, b);DateTime afterDT = DateTime.Now;//记录结束时间TimeSpan ts = afterDT.Subtract(beforDT);    //时间差Console.WriteLine("Combine1总共花费{0}ms.", ts.TotalMilliseconds);Console.WriteLine("开始记录时间");DateTime beforDT2 = DateTime.Now;//记录开始时间byte[] c2 = Combine2(a, b);DateTime afterDT2 = DateTime.Now;//记录结束时间TimeSpan ts2 = afterDT2.Subtract(beforDT2);    //时间差Console.WriteLine("Combine2总共花费{0}ms.", ts2.TotalMilliseconds);Console.ReadKey();}/// <summary>/// 将数组a,b进行合并/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <param name="c"></param>private static byte[] Combine1(byte[] a, byte[] b){byte[] c = new byte[a.Length + b.Length];for (int i = 0; i < a.Length; i++){c[i] = a[i];}for (int j = a.Length; j < a.Length + b.Length; j++){c[j] = b[j-a.Length];}return c;}/// <summary>/// 将数组a,b进行合并/// </summary>/// <param name="a"></param>/// <param name="b"></param>/// <param name="c"></param>private static byte[] Combine2(byte[] a, byte[] b){byte[] c = new byte[a.Length + b.Length];Array.Copy(a, 0, c, 0, a.Length);Array.Copy(b, 0, c, a.Length, b.Length);return c;}}
}


数组长度改为5000000,花费时间更加明显

C#中数组合并(Array.Copy的用法)相关推荐

  1. a b c d java_java中数组String array{a,b,c,d,c,d,e}如何能把字段相同的分到另外的数组中...

    展开全部 数组中提取相同的字母,可以使用string的charat方法遍历字母,放到一个string中,找到之后删除掉这62616964757a686964616fe59b9ee7ad94313333 ...

  2. 那些方式可以合并php数组,php中数组合并的几种方法

    php中数组的几种合并方法: array_merge(array1,array2):两个数组中的一维数据合并,二维数组如果key相同,array2中的值会替代array1中的值: 加号:array1+ ...

  3. VBA中数组(Array)与随机数(Rnd)的使用

    作者: 奔跑的犀牛先生 本文链接:https://blog.csdn.net/xuemanqianshan/article/details/88962097 一 数组 array 1.1 数据定义 静 ...

  4. js中数组定义Array

    全栈工程师开发手册 (作者:栾鹏) js系列教程1-数组操作全解 js中数组定义 js中数组的定义非常简单,包含以下5中方式.不过首先要明确的是数组是Array类型的.不是基本数据类型 代码如下: v ...

  5. js中数组原型Array、自定义原型函数Array.prototype

    全栈工程师开发手册 (作者:栾鹏) js系列教程1-数组操作全解 js中数组原型.自定义原型函数 每个数组都包含length.prototype.constructor属性. 通过在prototype ...

  6. java中数组合并的方法,数组合并--Java原生方法

    废话不多说,直接上代码(工具类): public static Object[] combineArray(Object one[], Object two[]) throws BussinessEx ...

  7. C#把某个数组的一部分复制到另一个数组中的两种方法:Buffer.BlockCopy和Array.Copy...

    static void Main(string[] args){int[] src = new[] { 1, 2, 3, 4, 5, 6 };const int destLen = 4;//目标数组大 ...

  8. php 二维数组字段合并,PHP将二维数组某一个字段相同的数组合并起来的方法,二维数组数组_PHP教程...

    PHP将二维数组某一个字段相同的数组合并起来的方法,二维数组数组 本文实例讲述了PHP将二维数组某一个字段相同的数组合并起来的方法.分享给大家供大家参考,具体如下: 例子: array(3) { [0 ...

  9. c语言memset清空指向数组的指针_C语言中数组和指针的关系

    数组的数组名其实可以看作一个指针.看下例: 1.    int array[10]={0,1,2,3,4,5,6,7,8,9},value; 2.    value=array[0]; //也可写成: ...

最新文章

  1. 如何在Java中检查字符串是否为数字
  2. 自动增加asp元件及onclick
  3. POJ2391(最大流Isap+Floyd+二分)
  4. Leetcode 382. 链表随机节点 解题思路及C++实现
  5. 关于 Math.pow 的一个坑
  6. js中的history内置对象在各浏览器中的用法:
  7. Matlab Tricks(二十三)—— 保存图像到 pdf
  8. Pokémon Go呼应设计:让全世界玩家疯狂沉迷
  9. lintcode:1-10题
  10. Druid手动创建连接的坑
  11. 最强白嫖指南---推荐11个珍藏多年的网站!
  12. 西工大机考《会计电算化》大作业网考
  13. Python 随机生成 范围内(周围) 经纬度 坐标信息
  14. android studio设置SVN忽略
  15. 【微信小程序】使图片占满整个屏幕的解决方案
  16. mysql 判断质数_质数(素数)判断算法总结
  17. Deep Speech笔记
  18. python关键字参数必须位于位置参数之前_python关键字参数和位置参数
  19. gitlab修改时区
  20. 苹果怎么设置铃声?设置自己喜欢的歌曲作为铃声,一招搞定!

热门文章

  1. HDMI、DVI、VGA等这些接口
  2. vscode ESLint格式不正确老是报错 more than 1 blank line not allowed
  3. 12月8日:thinkphp中的杂项
  4. C#窗体Winform,鼠标悬停在控件上,提示框,显示信息。
  5. JS——Url 转码、获取Url上的参数
  6. Cesium实现地球自转明暗分割,类似官网封面效果
  7. 如何在电子市场和安卓市场下载并安装免费好用的APK文件?
  8. 找出我的前50有声读物
  9. 一只特立独行的猪-王小波作品
  10. Java工程师面试有哪些要求?