1

我正在尝试实现一种算法来对相同列表或不同列表中的项目进行排序,并将结果保存在数据库中。

在 GUI 中对项目进行排序的代码已经存在。我正在使用 jquery-ui,它能够为我提供新位置的索引。

示例 1:
假设我在同一个列表中有两个项目。
如果我移动第一个项目代替second item我能够获得值1(这是第二个项目的位置)。

我正在使用 javascript 来实现代码,但实际上我对pseudo code.

如果我必须对同一个列表中的项目进行排序,那么故事就很简单了。
数据模型应如下所示:

firstItem: {
  id: 5,
  next: 0
},
secondItem: {
  id: 3
  next: 1
}

当我移动firstItemin 的位置时,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)来自javascript库newIndex。 2)我想列表在开始移动项目之前排序良好。newListID

4

0 回答 0