更快的代码,从字节数组中删除第一个元素[重复]

问题描述 投票:-4回答:3

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

c# algorithm bytearray
3个回答
11
投票

更容易,更快:

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有其自身的开销,尤其是对于诸如此类的简单问题,如果性能很关键,我将不使用它。


4
投票

您的代码很慢,因为您要将字节数组打包为字符串,然后将其拆包。摆脱字符串操作,它将很快。

您可以使用Linq:

tb.Skip(5).ToArray();

0
投票

关于

tb.Skip(5).ToArray()

© www.soinside.com 2019 - 2024. All rights reserved.