同じリストまたは別のリスト内のアイテムをソートし、結果をデータベースに保存するアルゴリズムを実装しようとしています。
GUI で項目を並べ替えるコードは既に存在します。新しい位置のインデックスを取得できる jquery-ui を使用しています。
例 1:
同じリストに 2 つの項目があるとします。の代わりに最初のアイテム
を移動すると、値(2 番目のアイテムの位置) を取得できます。second item
1
コードの実装にjavascriptを使用していますが、実際にはpseudo code
.
同じリスト内のアイテムを並べ替える必要がある場合、話は非常に簡単です。
データ モデルは次のようになります。
firstItem: {
id: 5,
next: 0
},
secondItem: {
id: 3
next: 1
}
firstItem
の代わりにを移動するとsecondItem
、次のようにモデルを変更できます。
firstItem.prev = firstItem.next;
firstItem.next = newIndex;
secondItem.next = firstItem.prev;
例 2:
異なるリスト間でアイテムを並べ替えたいとします。
ここで話がかなり複雑になると思います:
モデルは次のようになります:
// list 1
item_0_0 = {
id: 12,
list_id: 0,
next: 0
}
item_0_1 = {
id: 13,
list_id: 0,
next: 1
}
// list 2
item_1_0 = {
id: 45,
list_id: 1,
next: 0
}
item_1_1 = {
id: 35,
list_id: 1,
next: 1
}
item_0_0
と の間でを移動するitem_1_0
とitem_1_1
、モデルは次のようになります。
item_0_1 = {
id: 13,
list_id: 0,
next: 0 // 1 -> 0 because the previous-one has been moved in another list
}
item_1_0 // does not change because I insert the item_0_0 after
item_1_1 = {
id: 35,
list_id: 1,
next: 2 // 1->2 it changes because I inserted the item_0_0 before
}
item_0_0 = {
id: 12,
list_id: 1, // 0->1 I need to change the list
next: 1 // this is the new position in the new list
}
私の質問は、この場合リストを更新するための最良のコードは何ですか?
ここに私の疑似コードがあります:
item_0_0.list_id = newListID;
item_0_0.prev = item_0_0.next;
item_0_0.next = newIndex;
item_0_1.next = item_0_1.next - 1; // actually it should be iterated
// between all items after!
item_1_1.next = item_1_1.next + 1; // actually it should be iterated
// between all items after!
PS:
1)newIndex
でありnewListID
、javascript ライブラリから取得されます。
2)アイテムの移動を開始する前に、リストが適切にソートされていると思います。