私は巨大なリストを持っています。このリストから項目を追加/並べ替え/削除することができます。 リストは本当にバグなので、リスト全体のスナップショットをシステムのどこにでも保存したくありません。 代わりに、追加/移動された項目を追跡するために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番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動させます)。しかし、私のベースリストが(w、p、r、g、h)になる可能性があり、同じxmlファイルを使用する必要があります(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動します)新しい要素が予想される位置に追加されるようにします。いくつかの項目(Qのような)がベースリストにないがxmlにある場合、そのXMLノードを無視する必要があります。
リストは膨大であり、実際には大きいので保存したくありません。しかし、すべての変更を保存する必要があります。 * XML *を使用します。それを小さくするのに役立つとは思わない。 –
どのくらいですか? –
ありがとうございます。私はデータベースにファイルを格納できません。リストが巨大であるだけでなく、元のリストが変更される可能性があります。例えば、ベースリストは(p、q、r)である。そしてxmlは:(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動させます)。しかし、私のベースリストが(w、p、r、g、h)になる可能性があり、同じxmlファイルを使用する必要があります(xを2番目の位置に加え、4番目の位置にyを加え、4番目の位置にQを移動します)新しい要素が予想される位置に追加されるようにします。いくつかの項目(Qのような)がベースリストにないがxmlにある場合、そのXMLノードを無視する必要があります。 – needhelpwithalgo