有没有办法获取数组拆分之间数字的开始和结束?

问题描述

抱歉,我什至不知道该问题的标题

我有一个页面的数字数组。

这些页面是我需要从浏览器实际打印出来的页面

pagesToPrint = [2,3,4,5,7,8,9,12,14,15,16,17,18,19,20]

现在,仅打印2,7...20有什么问题?

将一页或多页发送到打印机时,将花费一些时间来进行处理。因此,为了加快处理速度,最好只分批打印。假设不打印2-23-34-4,而仅打印2-5,我们就不能打印2-20,因为它会打印页面6,10,11,13,所以等等。上。

example of custom print

我并不真的在乎哪种编程语言,答案只是其背后的逻辑。 最终,我试图在AutoHotkey中解决此问题。

解决方法

您可以通过一些“自上而下”的思维来解决此问题。在理想的世界中,已经有一个可以调用的函数:split_into_consecutive_batches(pages)

您如何在级别上描述其工作原理?基本上,这只是您的初始帖子和要求的更准确的措词!

“只要页面列表中有剩余页面,它就应该给我下一批。”

啊哈!

def split_into_consecutive_batches(pages):
  batches = []
  while pages:
    batches.append(grab_next_batch(pages))

  return batches

啊哈!还不错吧?总体上的大问题现在已简化为稍微更小,更简单的问题。我们如何 抢下一批?好吧,我们抓住了第一页。然后我们检查下一页是否是连续页。如果是这样,我们将其添加到批次中并继续。如果没有,我们认为批处理完成并停止:

def grab_next_batch(pages):
  first_page = pages.pop(0)  # Grab (and delete) first page from list.
  batch = [first_page]

  while pages:
    # Check that next page is one larger than the last page in our batch:
    if pages[0] == batch[-1] + 1:
      # It is consecutive! So remove from pages and add to batch
      batch.append(pages.pop(0))
    else:
      # Not consecutive! So the current batch is done! Return it!
      return batch
  # If we made it to here,we have removed all the pages. So we're done too!
  return batch

应该这样做。虽然可以清理一点;也许您不喜欢从页面列表中删除项目的副作用。而不是在周围复制内容,您只需找出索引即可。我将其保留为练习:)