Разбиение массива целых чисел на несколько блоков разной длины в Dart

#flutter #dart

Вопрос:

 List<int> mainList = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];

List<int> chukLengths= [2,4,4,4,2]
 

ожидаемый результат:

 [[1,2],[3,4,5,6],[7,8,9,10],[11,12,13,14],[15,16]]
 

Я хочу разделить основной список на 5 частей с указанной длиной.
Как решить эту проблему в Dart?

Ответ №1:

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

Вот код:

 List<int> mainList = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16];
List<int> chukLengths= [2,4,4,4,2];

List<List<int>> splitIntoChunks(List<int> list, List<int> chunks) {
  List<List<int>> result = [];
  

  for (int chunk in chunks) {
    result.add(list.sublist(0, chunk));
    list.removeRange(0, chunk);
  }
  
  return resu<
}

void main() {
  print(splitIntoChunks(mainList, chukLengths)); // [[1, 2], [3, 4, 5, 6], [7, 8, 9, 10], [11, 12, 13, 14], [15, 16]]
}

 

Комментарии:

1. Короче: List<List<T>> splitIntoChunks<T>(List<T> list, List<int> chunkLengths) => [for (var i = 0, s = 0; i < chunkLengths.length; i ) list.sublist(s, s = chunkLengths[i])];