ведение списка эффективно - PullRequest
0 голосов
/ 08 февраля 2011

У меня огромный список.Я могу добавить / переставить / удалить элементы из этого списка.Поскольку список действительно содержит ошибки, я не хочу хранить снимок всего списка где-либо в системе.Вместо этого я поддерживаю 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.

1 Ответ

1 голос
/ 08 февраля 2011

Это не касается вопроса вашего алгоритма, но вы могли бы сохранить свой список в базе данных?Вы можете использовать файловую СУБД, такую ​​как SQLite, которая очень проста в использовании.

Мне кажется, что описываемые вами операции можно легко выполнить с помощью некоторых простых операторов SQL.

Редактировать: MySQL изменен на SQLite

...