拖拉排序的算法
我们做一些系统的时候需要会需要让用户对某个 产品和 类别进行排序。
这时候我们就需要把哪个实体加一个叫做DisplayOrder的属性了
上升和下降的话只要求 把两个DisplayOrder对换一下就行了。
但是拖拉的话是不一样,就不能是简单的交换了而是需要将 DisplayOrder插入到前面
例如我们有
Name DisplayOrder
A 1
B 2
C 3
D 4
E 5
F 6
G 7
我们要将G拉到C前,我们就必须把 G的DisplayOrder设成C
然后把 C的设成D的,把D的设成E的,E的设成F的 F的设成G的。
但是这样的效率是比较差的。特别是在sql当中如果这样写的话可能会比较麻烦的。
因为DisplayOrder至少都是相差为1我们可以用一个更简单的方式来实现它
就是把 C和它后面的所有DisplayOrder全部+1但是这样的算法效率似乎还不是最好的。
因为如果是一个比较远距离的拖动我们就得更改好多项了。
一个更好的方式是 DisplayOrder 相差的值不是为1。这样就可以在某些程度下做到当把G的DisplayOrder设成c的。 而C+1不会跟D重复。从而降低更新。