有效地维护清单

时间:2011-02-08 17:36:54

标签: algorithm list collections

我有一个巨大的清单。我可以在此列表中添加/重新排列/删除项目。 由于列表确实是错误,我不希望将整个列表的快照存储在系统中的任何位置。 相反,我维护一个xml文件来跟踪添加/移动的项目。

每个项目都与index and change order相关联 定义添加/移动项目的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指数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位,将y添加到第4位,将Q移到第4位) )以便在预期位置添加新元素。如果某个项目(如Q)不在基本列表中,但是在xml中,我必须忽略该xml节点。

1 个答案:

答案 0 :(得分:1)

它没有解决您的算法问题,但您可以将列表存储在数据库中吗?您可以使用基于文件的DBMS,例如SQLite,它非常易于使用。

在我看来,您所描述的操作可以通过一些简单的SQL语句轻松完成。

编辑:MySQL改为SQLite