我可以通過迭代文件名,查找字符串中的第一個數字,形成一個基本字符串,計數器+可能的填充和結束字符串,並嘗試匹配這些。然而,這聽起來有點太混亂,讓我覺得必須有更好的方法。但是那裏?
我想要簡單的解決方案,因此我犧牲了內存,並使用幾個列表/地圖來排序/分組名稱。我將字符串打包到具有額外字段的輔助信息結構中。
我正在使用特殊比較功能。它並不完全是常量,因爲與比較字符串一起,它還爲每個條目提取並保存前綴。 (其實我比較CVS風格的文件版本,在我的情況下,前綴是一個分支的ID,序列是文件的相鄰版本。)
它的工作原理就是這樣。輸入文件列表:
"filename_00001.png"
"filename_00002.png"
"filename_00003.png"
第一條帶擴展名:
"filename_00001", "png"
"filename_00002", "png"
"filename_00003", "png"
然後從文件名前綴排序提取期間:名稱 - 在端所有數字。如果前綴相同,則比較數字。 (在我的情況下輸入不用零填充):
"filename_00001", "png", "filename_"
"filename_00002", "png", "filename_"
"filename_00003", "png", "filename_"
排序/前綴提取後,所有序列具有相同的前綴。如果文件末尾沒有數字,整個文件名稱就是一個前綴,並且它在定義上是唯一的。您也可以另外保存解號碼:
"filename_00001", "png", "filename_", 1
"filename_00002", "png", "filename_", 2
"filename_00003", "png", "filename_", 3
現在,他們全部整理和分類正確,輔助信息在那裏準備 - 所有其他操作都比較簡單。例如。在列表上迭代,可以用簡單的規則提取所有序列:與prev條目相比,prefix是相同的/ seq num是+1。
不好意思,它可能與你所做的沒有什麼不同。我只是不害怕在操作中丟失一點內存/ CPU,因爲跟着它們文件操作速度較慢/內存飢餓程度更大。
IMO你已經做了什麼是最簡單的解決方案。我建議你繼續採用差異化方法。它也不會像你想象的那樣混亂。 – liaK 2010-07-22 04:50:53
謝謝,應該這樣做。 – John 2010-07-22 18:12:10