【C#】数组合并

【C#】数组合并遇到一个需求,需要数组进行有序合并,发现可以直接调用Array的Copy方法来完成,代码如下:byte[]a={1,2,3};byte[]b={4,5,6};byte[]newArray=newbyte[a.Length+b.Length];Array.Copy(a,0,newArray,0,a.Length);Array.Copy(

大家好,欢迎来到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

(0)
上一篇 2023-12-19 16:00
下一篇 2023-12-19 19:33

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信