2011-02-08 65 views
0

我有一個巨大的名單。我可以添加/重新排列/從這個列表中刪除項目。 由於列表真的是bug,我不想將整個列表的快照存儲在系統中的任何位置。 而是我維護一個xml文件以跟蹤添加/移動的項目。有效維護名單

每個條目都與index and change order關聯。
Def- Change order:項目添加/移動的順序。
Def- Index:添加/移動項目的索引。

所以現在無論何時我需要顯示列表,我都會有我的原始列表和xml文件。我將使用xml文件,我將根據更改順序添加/移動項目。

無論何時我想從列表中移動/刪除任何項目,我都必須更改其他項目的索引。

爲了這個,我用簡單的代碼:

for each item in list: 
    If item's change order > removed/moved item's change order: 
     Do Item's CO = item's CO - 1 
     If item's index > removed item's index (This index is not actual index, 
               is the index where we inserted 
               /moved the item. Item's actual 
               index can be different, because 
               of the movements of other items 
               in the list) 
      Do Item's index = item's index - 1 

這個代碼在很多情況下失敗。例如。

原版(S,d,G,Y,U,I)

在我的XML

我有

X: (newly added) CO 1, index 5 
Giving me: (S, D, G, Y, X, U, I) 
Y: (already in list at position 4) CO 2 index 6 
Giving me: (S, D, G, X, Y, U, I) 
在此之後

在我的實際列表:

X: pos: 4 
Y: pos: 5 

現在我想刪除X.根據代碼
Y:CO 1 index 5

應用到原始列表中:(S,D,G,U,Y,I)

這是錯誤的!

這種類型的需求是否有任何正確的現有算法?

感謝....


我不能存儲在數據庫中的文件。原始列表可能會改變。例如。基表是(p,q,r)。 xml是:(將x添加到第2個pos,將y添加到第4個pos,將Q移動到第4個pos)。但是,我的基礎列表可能會變成(w,p,r,g,h),我必須使用相同的xml文件(將x添加到第2個pos,將y添加到第4個pos,將Q移動到第4個pos ),以便在預期位置添加新元素。如果某些項(如Q)不在基本列表中,但是在xml中,則必須忽略該xml節點。

+0

所以,名單是巨大的,你不想存儲它,因爲它真的很大。但是你想存儲你所做的所有更改。用* XML *。我認爲這不會讓它變小。 – 2011-02-08 17:46:21

+0

它有多大? – 2011-02-08 17:52:34

回答

1

它沒有解決你的算法的問題,但你可以將你的列表存儲在數據庫中嗎?你可以使用基於文件的DBMS,比如SQLite,使用起來非常簡單。

在我看來,你正在描述的操作可以很容易地用一些簡單的SQL語句完成。

編輯:MySQL更改爲SQLite