每隔一段时间,我必须处理用户可以手动排序的元素列表。
在大多数情况下,我尝试依赖使用订单敏感容器的模型,但这并不总是可行的,而是求助于向我的数据添加位置字段。这个位置字段是一个双精度类型,因此我总是可以计算两个数字之间的位置。然而,这并不理想,因为我担心会遇到一个极端情况,即我没有足够的数值精度来继续在两个数字之间插入。
我对保持头寸数字的最佳方法存有疑问。第一个想法是遍历所有行并在每次插入后给它们一个整数,例如:
在 2 和 3 之间删除一行之后:
1 2 2.5 3 4 5
位置编号更新后:
1 2 3 4 5 6
当然,如果我有大量条目,那可能会变得很重。不是专门在内存中,而是将所有新值存储回磁盘/数据库。我通常使用某种类型的 ORM 和移动软件。更新所有代码将从磁盘中取出每个对象并将它们设置为脏,从而重新验证我的数据模型的所有相关验证规则。
我也可以等到精度不足以计算两个位置之间的数字。但是,用户体验会很差,因为相同的操作将不再需要相同的时间。
我相信对于这些情况有一个标准算法,可以定期和持续地更新位置编号,或者只是其中一些。理想情况下,它应该是 O(log n),在最坏情况和最好情况之间没有很大的时间差异。
老实说,我也认为任何必须用户/排序的东西,在最坏的情况下都不能增长到成为一个真正的问题。边缘情况似乎也极为罕见,如果我搜索推动边界数字的解决方案则更是如此。但是,我仍然相信这个问题有一个众所周知的标准解决方案,我不知道,我想了解它。