大家好,欢迎来到IT知识分享网。
遇到一个需求,需要数组进行有序合并,发现可以直接调用Array的Copy方法来完成,代码如下:
byte[] a = { 1, 2, 3 };
byte[] b = { 4, 5, 6 };
byte[] newArray = new byte[a.Length + b.Length];
Array.Copy(a, 0, newArray, 0, a.Length);
Array.Copy(b, 0, newArray, a.Length, b.Length);
可是后面又一次用到了合并,于是就将其提取成数组合并的方法,代码如下:
public static byte[] ArrayCombine(byte[] a, byte[] b)
{
byte[] newArray = new byte[a.Length + b.Length];
for (int i = 0; i < newArray.Length; i++)
{
Array.Copy(a, 0, newArray, 0, a.Length);
Array.Copy(b, 0, newArray, a.Length, b.Length);
}
return newArray;
}
然而并没有完,后面又出现了需要三个数组合并的需求,于是我就有照猫画虎写了一个三个数组合并的方法,代码如下:
public static byte[] ArrayCombine(byte[] a, byte[] b, byte[] c)
{
byte[] newArray = new byte[a.Length + b.Length + c.Length];
for (int i = 0; i < newArray.Length; i++)
{
Array.Copy(a, 0, newArray, 0, a.Length);
Array.Copy(b, 0, newArray, a.Length, b.Length);
Array.Copy(c, 0, newArray, a.Length + b.Length, c.Length);
}
return newArray;
}
写完之后,发现,后面还有四个数组合并,五个数组合并,六个数组合并的要求,于是将ArrayCombine的参数改为byte[]数组集合,如下所示:
public byte[] ArrayCombine(List<byte[]> byteList)
{
List<byte> newBytes= new List<byte>();
foreach (var item in byteList)
{
for (int i = 0; i < item.Length; i++)
{
newBytes.Add(item[i]);
}
}
return newBytes.ToArray();
}
又一次写完后,挺高兴的,毕竟自己觉得代码更加优化了,但是在调用的时候就开始尴尬了。如果ArrayCombine方法参数直接写数组而不是集合的时候,调用的时候是这样的:
ArrayCombine(a, b);
而当参数是byte[]集合的时候,我需要这样调用:
List<byte[]> newBytes = new List<byte[]>();
newBytes.Add(a);
newBytes.Add(b);
ArrayCombine(newBytes);
这样对比起来,第一个明显代码量要比第二个少的多,调用起来更方便。可是,第一个不能满足动态变化参数个数的要求。于是想,有没有一个方法可以将它们的优点集合起来呢?答案是:有。我们可以利用params关键字来实现要求,代码如下:
public static byte[] ArrayCombine(params byte[][] value)
{
List<byte> newBytes = new List<byte>();
foreach (var item in value)
{
for (int i = 0; i < item.Length; i++)
newBytes.Add(item[i]);
}
return newBytes.ToArray();
}
如何调用?
ArrayCombine(a, b); //合并两个数组
ArrayCombine(a, b, c); //合并三个数组
ArrayCombine(a, b, c, d); //合并四个数组
其实,最后一个合并的方式是组长提出来的,我之前没接触过params关键字,也没想到要改进集合的方式,长知识了。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/22958.html