存储任意排序顺序的最有效方法是什么?

7
我目前正在开发一款Android应用,用户可以通过拖放来按照任意顺序对列表进行排序。因此,我必须将排序顺序存储在某个列的变量中。我想给每行分配一个数字,例如100000、200000、300000等等。如果用户将项目移动到100000和200000之间,则它的排序号码成为其邻居的平均值,即150000。这样,与使用常规的i+1排序值相比,我只需要更新单个行的排序号码。

什么是最有效的方法?大数字是否使用更多资源或需要更长时间进行排序?我预计只有不到100行,因此,如果大数字需要更长时间进行排序,我最好使用较小的数字并经常“重置”(当两个排序号码汇聚到一起时)。我知道对于如此少的行,如果我只使用i+1排序方法并每次更新我的数据库中的每一行,那么这并不重要。但是,我还将我的SQLite数据与BAAS同步,其中大部分都不允许批量保存。因此,对于我修改的每一行,我必须进行1次API请求。这就是为什么我试图在重新排序项目时尽量减少我修改的行数。

任何帮助都将不胜感激。

2
我对此不够了解,无法写出完整的答案,但我的猜测是您需要在数据库中模拟一个链表。让列表项保存前一个和后一个列表项的ID值。http://en.m.wikipedia.org/wiki/Doubly_linked_list - Carl
数据可能在多个用户/设备之间同步,因此我宁愿不依赖于其他可能已在服务器上被删除的本地存在的对象。 - Asd
2
在100行代码以下,无论你做什么都不会有任何显著的差异。 - Strawberry
https://dev59.com/GnRB5IYBdhLWcg3wtJGF - Tech Savant
@Gary http://stackoverflow.com/help/someone-answers - Tech Savant
1个回答

0

我最终还是采用了最初的方法,给每一行分配一个编号,比如100000、200000、300000等等。如果用户在100000和200000之间移动一个项目,那么它的排序号就变成了相邻项目排序号的平均值,即150000。由于我的行数相对较少,大约50行,所以我选择了这种方法,虽然可能不是最高效的,但却是最简单的。


我本来有一个很好的答案给你,但因为它不是“链表”,所以每个人都对我进行了攻击。这个网站上有一群技术专家,总是纠结于细节。 - Tech Savant
将第二个列表项移动到第一位。重复这个过程18次,你会遇到麻烦的。sqlfiddle - Paul Spiegel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接