gpt4 book ai didi

(标准?)问题的编码设计

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:02:36 27 4
gpt4 key购买 nike

似乎是一个足够标准的问题,可以保证解决方案中的标准设计:

假设我想在文件中写入 x+2(或更少)个字符串。 x 字符串构成一个部分的内容,这两个字符串构成该部分的页眉和页脚。要注意的是,如果内容中没有字符串,我将不会编写页眉/页脚字符串。此外,这些 x 字符串是从代码中不同的地方编写的。所以目前的流程是:

  1. 写标题字符串
  2. 编写内容字符串
  3. 写页脚字符串

这会导致即使内容为空也会写入页眉/页脚字符串,我必须解决这个问题,即在这种情况下不写入页眉/页脚字符串。

我能想到的解决方案是在正在写入的第一个内容字符串之前写入标题字符串(通过将每个内容字符串写入与标题字符串写入并使用 bool 标志防止多次标题字符串写入来实现),以及然后仅当标题字符串已写入时才写入页脚字符串(由 bool 标志控制)。

这是它的顶级要点,只是想知道是否有适用于此类情况的标准方法。

谢谢!

最佳答案

有很多解决方案:

  • 将页眉和数据行写入内存缓存,并在您尝试编写页脚时输出它们(但前提是数据行,否则不输出任何内容)。<
  • 同样的事情,但使用临时文件作为数据缓存以防它太大。
  • 记住标题以及是否输出它。

由于前两种解决方案效率低下(可能缓存大量数据,或使用相对较慢的外部存储),因此我将专注于后者。请参阅底部关于如何进行缓存的注释(a)

不需要缓存数据的方法只是有一个关于您是否已经编写了 header 的指示器。在每个数据行之前,仅当尚未设置标志时才输出标题(并设置标志)。你也可以使用这个标志来控制页脚(如果页眉没有输出,页脚也不应该输出):

def outHeader (str):
headerText = str
headerSent = false

def outdata (str):
if not headerSent:
write headerText
headerSent = true
write str

def outFooter (str):
if headerSent:
write str

就不需要数据缓存而言,此解决方案可能要简单得多。


(a) 如果您确实想要使用缓存解决方案(尽管建议它是次优解决方案),以下伪代码显示了如何可以这样做:

def outHeader (str):
cachedHeader = str
cachedData = ""

def outdata (str):
cachedData = cachedData + str + "\n"

def outFooter (str):
if cachedData != "":
write cachedHeader
write cachedData
write str

内存缓存和基于文件的缓存之间的唯一区别是:

  • 创建一个空的临时文件并将 lineCount 设置为 0,您当前在 outHeader() 中创建 cachedData 的位置。
  • str 发送到临时文件并在 outData() 中递增 lineCount
  • 使用 lineCount 判断 outFooter 中是否有缓存数据,并从临时文件中读回行以作为数据输出。

关于(标准?)问题的编码设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15105367/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com