我正在尝试实现一种算法来对同一列表或不同列表中的项目进行排序,并将结果保存在数据库中。
用于对GUI中的项目进行排序的代码已经存在。 我正在使用jquery-ui,它能够给我新位置的索引。
示例1:
我们假设我在同一个列表中有两个项目
如果我移动第一项代替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!
P.S .:
1)newIndex
和newListID
来自javascript库
2)我想在开始移动项目之前对列表进行了很好的排序。