2017-06-05 21 views
0

考慮以下循環:循環,「具有n項來處理,但只有n-1個更新步驟」

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

對於每個字符在input_file_contents,該循環做一個處理步驟中,存儲所述處理的結果步驟(01位),然後將marker_stream移位一個位置以準備下一次迭代。

問題出在這裏:我想處理輸入文件中的每個字符,但我只想移動marker_streamnumber of characters in the input file - 1次。上面的循環多次移動marker_stream

現在,我知道我可以在for循環後添加marker_stream >>= 1,或者我可以保留一些標誌,表明我們當前正在處理的角色是否是文件中的最後一個角色,但這些解決方案都不是大。標誌解決方案涉及標誌(yuck),如果處理循環較長,額外的線路解決方案可能會造成混淆。

我正在尋找一個更優雅的解決方案來解決這個問題,更普遍的是「我有n個項目要處理,但有一個更新步驟我只想運行n-1次」問題。

回答

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 

頭部條目不跟隨分隔符;尾部條目全部跟隨分隔符。通過將單頭條目與文件中的n-1尾條目區別對待,可以獲得「n-1」效果。