1

同じリストまたは別のリスト内のアイテムをソートし、結果をデータベースに保存するアルゴリズムを実装しようとしています。

GUI で項目を並べ替えるコードは既に存在します。新しい位置のインデックスを取得できる jquery-ui を使用しています。

例 1:
同じリストに 2 つの項目があるとします。の代わりに最初のアイテム
を移動すると、値(2 番目のアイテムの位置) を取得できます。second item1

コードの実装に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_0item_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)アイテムの移動を開始する前に、リストが適切にソートされていると思います。

4

0 に答える 0