【发布时间】:2011-06-23 14:34:46
【问题描述】:
我有一个巨大的清单。我可以从此列表中添加/重新排列/删除项目。 由于列表确实是错误,我不想将整个列表的快照存储在系统的任何位置。 相反,我维护一个 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 指数 5
将此应用于原始列表:(S、D、G、U、Y、I)
这是错误的!
对于此类需求,是否有任何正确的现有算法?
谢谢……
我无法将文件存储在数据库中。原始列表有可能改变。例如。基本列表是 (p,q,r)。 xml是:(将x添加到第2个位置,将y添加到第4个位置,将Q移动到第4个位置)。但是我的基本列表有可能变成(w,p,r,g,h),我必须使用相同的xml文件(将x添加到第2个位置,将y添加到第4个位置,将Q移动到第4个位置) 以便在预期位置添加新元素。如果某些项目(如 Q)不在基本列表中,但在 xml 中,我必须忽略该 xml 节点。
【问题讨论】:
-
所以,列表很大,您不想存储它,因为它真的很大。但是您想存储对它所做的所有更改。使用 XML。我认为这无助于让它变得更小。
-
感谢您的回复。我无法将文件存储在数据库中。这不仅是因为列表很大。原始列表有可能改变。例如。基本列表是 (p,q,r)。 xml是:(将x添加到第2个位置,将y添加到第4个位置,将Q移动到第4个位置)。但是我的基本列表有可能变成(w,p,r,g,h),我必须使用相同的xml文件(将x添加到第2个位置,将y添加到第4个位置,将Q移动到第4个位置) 以便在预期位置添加新元素。如果某些项目(如 Q)不在基本列表中,但在 xml 中,我必须忽略该 xml 节点。
-
所以这不是关于列表,而是关于那些说明?那到底是什么问题呢?
-
问题是当我第二次移动/删除某个项目时,我必须更改xml中其他项目的更改顺序和索引。它适用于大多数场景,但不是全部。我在上面描述了一个这样的失败场景。
标签: algorithm list collections