chunked method

Iterable<List<E>> chunked(
  1. int size, {
  2. E fill(
    1. int index
    )?,
})

将元素按指定 size 分块,最后一块的数量可以小于 size

使用 fill 可以将值填充到数量不足的块。

举例:

[1, 2, 3, 4, 5, 6].chunked(2);        // [[1, 2], [3, 4], [5, 6]]
[1, 2, 3].chunked(2);                 // [[1, 2], [3]]
[1, 2, 3].chunked(2, fill: () => 99); // [[1, 2], [3, 99]]

Implementation

Iterable<List<E>> chunked(int size, {E Function(int index)? fill}) {
  assert(size > 0, "chunkSize must be greater than 0.");
  // 计算块数量
  final chunkCount = (length / size.toDouble()).ceil();
  // 生成新的迭代独享
  return Iterable.generate(chunkCount, (int index) {
    final chunk = skip(index * size).take(size).toList();
    // 数据填充
    if (fill != null) {
      while (chunk.length < size) {
        chunk.add(fill(index));
      }
    }
    return chunk;
  });
}