将数组拆分为具有最小块大小的给定大小的块

Posted

技术标签:

【中文标题】将数组拆分为具有最小块大小的给定大小的块【英文标题】:Splitting an array up into chunks of a given size with a minimum chunk size 【发布时间】:2020-01-14 09:58:06 【问题描述】:

有很多将数组拆分为块的示例,例如:Split array into chunks,但我也想保持每个块的最小大小,最后一个块的大小不应小于预期的最小大小.

假设您有一个包含 1001 个项目的数组,并且您想要拆分为 100 个块。最后一个块的大小将变为 1,在某些情况下它可能不是预期的结果。所以你也有预期的块的最小大小。有哪些可能的方法?

【问题讨论】:

Split array into chunks的可能重复 嗯,有点,但是没有最小块大小的解决方案。 为什么问一个问题就马上回答? 这是***中分享知识的功能,有一个复选框可以立即回答问题。我刚遇到这样的要求,我想分享一下。 【参考方案1】:

1.如果最后一个块中的元素少于最小元素,则删除它:

const chunk = (arr, size, min) => 
  const chunks = arr.reduce(
    (chunks, el, i) =>
      (i % size ? chunks[chunks.length - 1].push(el) : chunks.push([el])) && chunks,
    []
  );
  const l = chunks.length;

  if (chunks[l - 1].length < min) chunks.pop();
  return chunks;
;

2。将最后一个块添加到前一个块中:

const chunk = (arr, size, min) => 
  const chunks = arr.reduce(
    (chunks, el, i) =>
      (i % size ? chunks[chunks.length - 1].push(el) : chunks.push([el])) && chunks,
    []
  );
  const l = chunks.length;

  if (chunks[l - 1].length < min) chunks[l - 2].push(...chunks.pop());
  return chunks;
;

3.将最后一个块平均分配到其他块中:

const chunk = (arr, size, min) => 
  const chunks = arr.reduce(
    (chunks, el, i) =>
      (i % size ? chunks[chunks.length - 1].push(el) : chunks.push([el])) && chunks,
    []
  );
  const l = chunks.length;

  if (chunks[l - 1].length < min) 
    const lastChunk = chunks.pop();
    let i = 0;

    while (lastChunk.length) 
      chunks[i % (l - 1)].push(lastChunk.pop());
      i += 1;
    
  

  return chunks;
;

希望这会有所帮助。

【讨论】:

以上是关于将数组拆分为具有最小块大小的给定大小的块的主要内容,如果未能解决你的问题,请参考以下文章

javascript 将数组拆分为相同大小的块

如何在Oracle中将表行拆分为固定大小的块

将数组拆分为不同大小的块(4、3、3、3、4、3、3、3 等)

有没有更惯用的方法来拆分 std::vector?

给定一个大小为 N 的数组,我需要找到在最小和最大范围内求和的最小值数

文件系统中的块大小和inode大小