chunked method
将元素按指定 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;
});
}