【问题标题】:maintaining list effectively有效维护清单
【发布时间】: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


【解决方案1】:

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

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

编辑:MySQL 改为 SQLite

【讨论】:

  • 感谢您的回复,但我无法将文件存储在数据库中。原始列表有可能改变。例如。基本列表是 (p,q,r)。 xml是:(将x添加到第2个位置,将y添加到第4个位置)。但是我的基本列表有可能变成(w,p,r,g,h),我必须使用相同的xml文件(将x添加到第2个位置,将y添加到第4个位置,将Q移动到第4个位置) 以便在预期位置添加新元素。如果某些项目(如 Q)不在基本列表中,但在 xml 中,我必须忽略该 xml 节点。
  • 如果您必须安装和管理它,我不会说 MySQL 使用起来那么简单。对于这种简单的列表,最好使用 gdb 或 SQLite 之类的东西。两者都是独立的,不需要任何服务器进程。
  • 啊,抱歉。 SQLite 是我所想的。
  • 关于@Michael 的评论,以及帮助您进行谷歌搜索(gdb 也是 GNU 调试器的名称),gdb 是嵌入式 Firebird 服务器。如果您使用的是 .NET,还有 SQL Compact Edition。
  • 再次感谢您,但即使解决了问题,我也无法使用SQLite。我必须在已经使用的技术中实施解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
  • 2020-10-07
相关资源
最近更新 更多