大佬们,遇到个有意思的问题,看看有解吗

2019-04-26 16:44:26 +08:00
 rizon

表里存储的数据如下

name | order
-----|------
A | 1
B | 2
C | 3

然后比如我要改变 C 的顺序,放到 A 和 B 之间,那么最直接的方式是修改为

name | order
------|------
A | 1
B | 3
C | 2

但是有没有办法可以做到,尽量只修改 C 的 order 值就可以来改变顺序呢?
也就是说有没有一种可以表达顺序的方式,能够做的只修改自身的值就可以改变顺序

为了表达更清晰我举个例子,比如这样
name | order
------|------
A | 1
B | 2
C | 1.5

但是这种对半除的方式,会导致无限小数的问题,不够严谨,感觉也不太合适。
ps. v2 的 markdown 不支持表格唉

3057 次点击
所在节点    程序员
26 条回复
zilaijuan
2019-04-26 20:16:07 +08:00
@jhdxr 个人感觉存分数会增加计算量,影响排序的效率
ccpp132
2019-04-26 20:36:11 +08:00
分数也要挂的,分母越来越大,除不了很多次就存不下了。学点信息论就知道这没什么方法,除 2 每次就减少一半可用来表示的内容。不管你存成什么形式
saulshao
2019-04-26 22:52:54 +08:00
这个正如楼上的总结,根本就没什么一劳永逸的方法。完全取决于你面临的具体问题,然后设计具体的方案。
opengps
2019-04-26 23:30:07 +08:00
要不排序列就换成小数点吧,或者加大默认数值间隔
xuanbg
2019-04-27 08:14:01 +08:00
先预留空间,插到哪个后面就哪个的序号+1。空间内位置冲突则空间内重排,空间满则后面若干空间(可按实际情况设置 2-10 )全部重排。一般每个空间预留 10000 就足够了,很少重排。多空间重排基本只是摆设,从来用不到。
xuanbg
2019-04-27 08:15:48 +08:00
@xuanbg 插前面就序号-1

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/558995

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX