加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 合并保留订单的集合的最有效方法?

发布时间:2020-12-16 00:07:15 所属栏目:百科 来源:网络整理
导读:我有3个频道: byte[] Red;byte[] Green;byte[] Blue; 我需要将它们中的所有值复制到一个字节[Red.Length Green.Length Blue.Length] PA中,这样: PA[0] = Red[0];PA[1] = Green[0];PA[2] = Blue[0];PA[3] = Red[1];/// and so on 以下是上述数组的示例: by
我有3个频道:

byte[] Red;
byte[] Green;
byte[] Blue;

我需要将它们中的所有值复制到一个字节[Red.Length Green.Length Blue.Length] PA中,这样:

PA[0] = Red[0];
PA[1] = Green[0];
PA[2] = Blue[0];
PA[3] = Red[1];
/// and so on

以下是上述数组的示例:

byte[] Red = new byte[255];
byte[] Green = new byte[255];
byte[] Blue = new byte[255];
byte[] PA = new byte[Red.Length + Green.Length + Blue.Length];
for (int i = 0; i != 255; ++i)
{
    PA[i*3 + 0] = Red[i];
    PA[i*3 + 1] = Green[i];
    PA[i*3 + 2] = Blue[i];
}

我假设要合并的集合具有相同的大小,并且它们之间确实有一些顺序,例如[0] =红色,[1] =绿色等,必须为“合并”集合中的项目保留.

在C#中执行此操作的最有效方法是什么?集合不必是数组也不必是items字节(尽管可以理解接受字节的集合类型).

解决方法

我试图通过使用指针来制作更有效的方法:

unsafe {
  fixed (byte* red = Red,green = Green,blue = Blue,pa = PA2) {
    byte* r = red,g = green,b = blue,p = pa;
    for (int i = 0; i < 255; i++) {
      *p = *r; p++; r++;
      *p = *g; p++; g++;
      *p = *b; p++; b++;
    }
  }
}

在x86模式下,这大约快两倍,但在x64模式下没有区别.

总之,您拥有的代码已经足够快,适用于大多数应用程序.如果你需要它非常快,你可以稍微优化它,但不是很多.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读