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

时间:2015-07-21 22:08:20

标签: c# algorithm bytearray

所以我有一个字节数组,我需要从中删除前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个元素的另一种方法。

3 个答案:

答案 0 :(得分:7)

更容易,更快捷:

byte[] src = ...;
byte[] dst = new byte[src.Length - 5];

Array.Copy(src, 5, dst, 0, dst.Length);

这和你能够获得的一样快。

LINQ用于其他答案,更容易理解,是我90%的时间都在做的事情。但是,LINQ有自己的开销,特别是对于像这样的简单问题,如果性能很关键,我就不会使用它。

答案 1 :(得分:2)

您的代码很慢,因为您将字节数组打包成字符串然后解压缩。摆脱字符串操作,它会很快。

您可以使用Linq:

tb.Skip(5).ToArray();

答案 2 :(得分:0)

怎么样?
tb.Skip(5).ToArray()