更快的代码从字节数组中删除第一个元素

本文关键字:数组 删除 第一个 元素 字节数 字节 代码 | 更新日期: 2023-09-27 18:04:06

所以我有一个字节数组,我需要从中删除前5个元素。不管怎样,我在网上找了一下,我找不到任何适合我要找的东西。所以我做了这个,它慢得可怕,本质上,无法使用。

        private byte[] fR(byte[] tb)
        {
            string b = "";
            byte[] m = new byte[tb.Length - 5];
            for (int a = 5; a < tb.Length; a++)
            {
                b = b + " " + tb.GetValue(a);
            }
            b = b.Remove(0, 1);
            string[] rd = Regex.Split(b, " ");
            for (int c = 0; c < rd.Length; c++)
            {
                byte curr = Convert.ToByte(rd[c]);
                m.SetValue(curr, c);
            }
            return m;
         }

我要问的是,是否有一种方法可以使这个更快/改进。或者另一种方法,我可以从字节数组中删除前5个元素。

更快的代码从字节数组中删除第一个元素

更方便快捷:

byte[] src = ...;
byte[] dst = new byte[src.Length - 5];
Array.Copy(src, 5, dst, 0, dst.Length);

这是你最快的速度了

如果你正在使用c# 8,你可以使用范围来非常简洁地复制数组的切片:

byte[] src = ...;
byte[] dst = src[5..];
在其他答案中使用的LINQ,更容易理解,是我90%的时间会做的。但是,LINQ有自己的开销,特别是对于这样简单的问题,如果性能很重要,我不会使用它。

您的代码很慢,因为您将字节数组打包成字符串,然后再将其解包。去掉字符串操作,它会更快。

你可以使用Linq:

tb.Skip(5).ToArray();

tb.Skip(5).ToArray()

?