2016-01-18 1 views
2

У меня есть три bytearray, длина которых . Я хочу объединить индекс bytearray 0,1 байтовой матрицы1, затем индекс 0,1 bytearaay2 и индекс bytearray3 до длина.объединить 3 bytearray в один в C#

Как это:

Сценарий:

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 байт в одном одном виде пары группировки.

+1

Что случилось с очень простой петлей? –

ответ

2

При условии, что все массивы (скажем, source1, source2, source3) имеют одинаковой длины и эта длина является даже номер (40000):

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]; 
    } 

только для петли.

0

В C# 3.0 вы можете использовать LINQ:

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

Он хочет, чтобы значения массивов чередуются, а не конкатенированы. –

+0

На самом деле он объединяет bytearray1 и bytearray2. Таким образом, упорядочение является bytearray1 (все байты из byteaaray1), а затем bytearray2 (все байты из bytearray2). Но я хочу bytearray1 [0] bytearray1 [1] bytearray2 [0] bytearray2 [1] и затем и так далее. В паре двух 0,1 индекса 2,3 индекса и 4,5 и т. Д. Всех трех байтовых массивов. –

+0

Я редактирую свой пост ... с помощью этого метода объединить 3 байтовый массив в один – rdn87

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; 
} 

Вы можете, очевидно, разбить это, используя некоторые вспомогательные функции. Вы также можете упростить цикл (удаление проверок if), если вы позволите исходному результату вначале быть в 3 раза больше длины источника, а затем подстроить до соответствующего размера после чередования.