C#中数组合并(Array.Copy的用法)
首先应该理解数组在《数据结构》中的概念,数组是一个线性表,在定义的时候由内存分配一个指定大小的内存空间,所以相较于链表(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的用法)相关推荐
- a b c d java_java中数组String array{a,b,c,d,c,d,e}如何能把字段相同的分到另外的数组中...
展开全部 数组中提取相同的字母,可以使用string的charat方法遍历字母,放到一个string中,找到之后删除掉这62616964757a686964616fe59b9ee7ad94313333 ...
- 那些方式可以合并php数组,php中数组合并的几种方法
php中数组的几种合并方法: array_merge(array1,array2):两个数组中的一维数据合并,二维数组如果key相同,array2中的值会替代array1中的值: 加号:array1+ ...
- VBA中数组(Array)与随机数(Rnd)的使用
作者: 奔跑的犀牛先生 本文链接:https://blog.csdn.net/xuemanqianshan/article/details/88962097 一 数组 array 1.1 数据定义 静 ...
- js中数组定义Array
全栈工程师开发手册 (作者:栾鹏) js系列教程1-数组操作全解 js中数组定义 js中数组的定义非常简单,包含以下5中方式.不过首先要明确的是数组是Array类型的.不是基本数据类型 代码如下: v ...
- js中数组原型Array、自定义原型函数Array.prototype
全栈工程师开发手册 (作者:栾鹏) js系列教程1-数组操作全解 js中数组原型.自定义原型函数 每个数组都包含length.prototype.constructor属性. 通过在prototype ...
- java中数组合并的方法,数组合并--Java原生方法
废话不多说,直接上代码(工具类): public static Object[] combineArray(Object one[], Object two[]) throws BussinessEx ...
- C#把某个数组的一部分复制到另一个数组中的两种方法:Buffer.BlockCopy和Array.Copy...
static void Main(string[] args){int[] src = new[] { 1, 2, 3, 4, 5, 6 };const int destLen = 4;//目标数组大 ...
- php 二维数组字段合并,PHP将二维数组某一个字段相同的数组合并起来的方法,二维数组数组_PHP教程...
PHP将二维数组某一个字段相同的数组合并起来的方法,二维数组数组 本文实例讲述了PHP将二维数组某一个字段相同的数组合并起来的方法.分享给大家供大家参考,具体如下: 例子: array(3) { [0 ...
- c语言memset清空指向数组的指针_C语言中数组和指针的关系
数组的数组名其实可以看作一个指针.看下例: 1. int array[10]={0,1,2,3,4,5,6,7,8,9},value; 2. value=array[0]; //也可写成: ...
最新文章
- 如何在Java中检查字符串是否为数字
- 自动增加asp元件及onclick
- POJ2391(最大流Isap+Floyd+二分)
- Leetcode 382. 链表随机节点 解题思路及C++实现
- 关于 Math.pow 的一个坑
- js中的history内置对象在各浏览器中的用法:
- Matlab Tricks(二十三)—— 保存图像到 pdf
- Pokémon Go呼应设计:让全世界玩家疯狂沉迷
- lintcode:1-10题
- Druid手动创建连接的坑
- 最强白嫖指南---推荐11个珍藏多年的网站!
- 西工大机考《会计电算化》大作业网考
- Python 随机生成 范围内(周围) 经纬度 坐标信息
- android studio设置SVN忽略
- 【微信小程序】使图片占满整个屏幕的解决方案
- mysql 判断质数_质数(素数)判断算法总结
- Deep Speech笔记
- python关键字参数必须位于位置参数之前_python关键字参数和位置参数
- gitlab修改时区
- 苹果怎么设置铃声?设置自己喜欢的歌曲作为铃声,一招搞定!