循环,“有n个项目要处理,但只有n-1个更新步骤”

时间:2017-06-05 17:41:00

标签: loops language-agnostic

考虑以下循环:

marker_stream = 0
for character in input_file:
            if character != ',':
               marker_stream |= 1
            marker_stream <<= 1

对于input_file_contents中的每个字符,此循环执行处理步骤,将处理步骤的结果(01位)存储在marker_stream中,然后将marker_stream移到一个位置以准备下一次迭代。

问题在于:我想处理输入文件中的每个字符,但我只想转移marker_stream number of characters in the input file - 1次。上面的循环将marker_stream移动了太多次。

现在,我知道我可以在for循环之后添加marker_stream >>= 1,或者我可以保留一些标志,说明我们当前处理的字符是否是文件中的最后一个字符,但这些都不是解决方案似乎很棒。标志解决方案涉及标志(yuck),如果处理循环更长,额外的行解决方案可能会令人困惑。

我正在寻找一个更优雅的解决方案来解决这个问题,而且更常见的是“我有n个要处理的项目,但有一个更新步骤,我只想运行n-1次”问题。

1 个答案:

答案 0 :(得分:0)

分别处理文件中的第一个元素;将文件视为一个条目的头部,尾部包含其余条目:

// Process head
entry <- readNext(inFile)
write(entry, outFile)

// Process tail
while (NOT inFile.endOfFile)
  write(separator, outFile)
  entry <- readNext(inFile)
  write(entry, outFile)
endwhile

头条目不跟随分隔符;尾部条目都遵循分隔符。你得到了你的&#39; n-1&#39;通过不同于文件中的n-1尾部条目来处理单个头部条目的效果。