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