Как разделить массив на несколько частей, где 1 число массива - кол-во элементов, которые нужно поместить в массив?

Рейтинг: 2Ответов: 1Опубликовано: 09.01.2023

Допустим у нас на вход идёт массив [2, 5, 6, 3, 4, 5, 8, 1, 2]. Первое число является количеством последующих элементов, которые нужно поместить в массив, а за ней следуют элементы этого массива, и возврающаются отдельные массивы. Как его разделить на подмассивы которые будут выглядеть как [5, 6], [4, 5 8], [2]?

Ответы

▲ 4Принят

Моё предложение реализации:

public static IEnumerable<int[]> Arr(int[] data) {
    for (int p = 0; p < data.Length;) {

        int d = data[p++];    // Получаем размер массива

        d = (d <= 0) ? 0 : d; // Если размер не корректный, то правим
        int[] arr = new int[d]; // Создаём массив

        for(var i = 0; i < d && p < data.Length; i++, p++)
            arr[i] = data[p];   // Заполняем массив данными

        yield return arr;       // Результат
    }
}

public static void Main()
{
    var data = new int[] {2, 5, 6, 3, 4, 5, 8, 1, 2};
    var source = Arr( data );

    foreach (var numarr in source) {
        numarr.ToList().ForEach(i => Console.Write( "{0} ", i));
        Console.WriteLine();
    }
}

Результат:

5 6 
4 5 8 
2

https://dotnetfiddle.net/SeM3pT