2010-06-15 7 views
1

У меня есть массив, я не знаю длины, но я знаю, что это будет = = 48 байт. Первые 48 байтов - это заголовок, и мне нужно разделить заголовок на два.Массив разделен по диапазону?

Самый простой способ? Я надеюсь что-то так же просто, как header.split (32); будет работать ([0] составляет 32 байт [1] является 16 предполагая заголовком представляет собой массив 48bytes)

использование .NET

+0

какой язык? C#? – Sev

+0

Да. Я решил написать код. я отправлю. –

ответ

0

я решил написать что-нибудь. Это может быть лучше, чем расширенная функция, но сейчас это хорошо.

Byte[][] SplitArray(byte[] main, params int[] size) 
    { 
     List<Byte[]> ls = new List<byte[]>(); 
     int offset = 0; 
     foreach (var v in size) 
     { 
      var b = new Byte[v]; 
      Array.Copy(main, offset, b, 0, v); 
      ls.Add(b); 
      offset += v; 
     } 
     { 
      var b = new Byte[main.Length-offset]; 
      Array.Copy(main, offset, b, 0, b.Length); 
      ls.Add(b); 
     } 
     return ls.ToArray(); 
    } 
+0

Мы знаем, что в расширенном заголовке будет разделяться две половины, поэтому почему нельзя использовать 2D-массив вместо списка –

+0

В этом случае вы можете видеть, что функция разбивает его в соответствии с тем, сколько параметров размера передано так, что SplitArray может иметь 0-n расщепляется. Хотя я могу делать size.Length или .Count, я все еще ленив и люблю использовать список. Также у меня нет индекса в цикле foreach, который подталкивает мою ленивость к использованию add() –

3

Здесь я расщепляюсь массивом целых чисел в 2 массивов 4 и левые элементы:

var limit = 4; 

int[] array = new int[] { 1, 2, 3, 4, 5, 6 }; 

int[][] res = array.Select((value, index) => new { index = index, value = value }) 
        .GroupBy(i => i.index < limit) 
        .Select(g => g.Select(o => o.value).ToArray()) 
        .ToArray(); 

UPD: римейк с расширением:

class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] array = new int[] { 1, 2, 3, 4, 5, 6 }; 

     int[][] res = array.split(4); 
    } 
} 

static class MyExtension 
{ 
    public static int[][] split(this IEnumerable<int> array, int limit) 
    { 
     return array.Select((value, index) => new { index = index, value = value }) 
        .GroupBy(i => i.index < limit) 
        .Select(g => g.Select(o => o.value).ToArray()) 
        .ToArray(); 
    } 
} 
+0

Выглядит сложным. Тем не менее, +1. –

Смежные вопросы