【问题标题】:merge 3 bytearray into single one in c#在c#中将3个字节数组合并为一个
【发布时间】:2016-01-18 13:23:58
【问题描述】:

我有三个长度为 40000bytearray。我想将字节数组 1 的 bytearray 索引 0,1、bytearaay2 的索引 0,1 和 bytearray3 的索引合并到 40000 长度。

像这样:

场景:

a1[0]a1[1]a2[0]a2[1]a3[0]a3[1]a1[2]a1[3]a2[2]a2[3]a3[2]a3[3] ...

and then so on up to 40000.

所以最后我想将 3 字节数组合并为单个作为一对分组。

【问题讨论】:

  • 一个非常简单的循环有什么问题?

标签: c# byte bytearray


【解决方案1】:

假设所有数组(例如,source1source2source3)的长度相同并且这个长度是偶数(@ 987654324@):

  Byte[] result = new Byte[source1.Length * 3];

  for (int i = 0; i < source1.Length / 2; ++i) {
    result[i * 6] = source1[2 * i];
    result[i * 6 + 1] = source1[2 * i + 1];

    result[i * 6 + 2] = source2[2 * i];
    result[i * 6 + 3] = source2[2 * i + 1];

    result[i * 6 + 4] = source3[2 * i];
    result[i * 6 + 5] = source3[2 * i + 1];
  }

只是一个 for 循环

【讨论】:

    【解决方案2】:
    int resultIndex = 0;
    int groupingIndex = 0;
    int maxLength = 40000;
    while (resultIndex < maxLength)
    {
       result[resultIndex] = source1[groupingIndex];
       resultIndex++;
       if (resultIndex >= maxLength) break;
       result[resultIndex] = source1[groupingIndex+1];
       resultIndex++;
       if (resultIndex >= maxLength) break;
       result[resultIndex] = source2[groupingIndex];
       resultIndex++;
       if (resultIndex >= maxLength) break;
       result[resultIndex] = source2[groupingIndex+1];
       resultIndex++;
       if (resultIndex >= maxLength) break;
       result[resultIndex] = source3[groupingIndex];
       resultIndex++;
       if (resultIndex >= maxLength) break;
       result[resultIndex] = source3[groupingIndex+1];
       resultIndex++;
       if (resultIndex >= maxLength) break;
       groupingIndex = groupIndex + 2;
    }
    

    您显然可以使用一些辅助函数将其分解。如果您允许结果最初是源长度的 3 倍,然后在交错后修剪到适当的大小,您还可以简化循环(删除 if 检查)。

    【讨论】:

      【解决方案3】:

      C# 3.0 中,您可以使用 LINQ

      Byte[] combinedByte = bytearray1.Concat(bytearray2).ToArray();
      Byte[] combinedByte = combinedByte.Concat(bytearray3).ToArray();
      

      【讨论】:

      • 他希望数组值交错而不是连接
      • 实际上它连接了 bytearray1 和 bytearray2。所以排序是 bytearray1(来自 byteaaray1 的所有字节),然后是 bytearray2(来自 bytearray2 的所有字节)。但我想要 bytearray1[0]bytearray1[1]bytearray2[0]bytearray2[1] 等等。成对的两个 0,1 索引 2,3 索引和 4,5 等所有三字节数组。
      • 我正在编辑我的帖子...用这种方法将 3 字节数组合并为单个
      • 实际上它连接了 bytearray1 和 bytearray2。所以排序是 bytearray1(来自 byteaaray1 的所有字节),然后是 bytearray2(来自 bytearray2 的所有字节)。但我想要 bytearray1[0]bytearray1[1]bytearray2[0]bytearray2[1] 等等。在所有三字节数组中的两个 0,1 索引 2,3 索引和 4,5 等成对
      猜你喜欢
      • 1970-01-01
      • 2012-01-27
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 1970-01-01
      • 2017-09-12
      • 2012-11-01
      • 1970-01-01
      相关资源
      最近更新 更多