用于自定义排序的排序键,并用O(1)写操作交换元素

时间:2019-07-06 13:44:33

标签: sorting data-structures database-design

我正在iOS上实现表格视图,并想向社区征求有关如何优化数据结构以允许用户自定义表格视图单元格并保留排序键的建议-即,将它们拖放到不同的位置并保持顺序。

据我所想(和Google一样),要对两个单元格重新排序,将需要在要移动的元素下方(或如果向上移动时要移动到的位置)下的所有单元格上重新写入顺序整数在列表中较高)。

例如,我有以下项目:

(项目1,索引1),(项目2,索引2),(项目3,索引3),(项目4,索引4),(项目5,索引5)

要将项目5移动到列表顶部,结果数据将如下所示,即重新编写所有五个项目的索引。

(项目5,索引1),(项目1,索引2),(项目2,索引3),(项目3,索引4),(项目4,索引5)

我当然可以将索引保留在内存中,并且仅在用户完成操作或离开视图时才重写它们,但是这对我来说就像是代码的味道,因为移动一个元素的操作的平均值为O (n / 2)== O(n)个运算。

该表也永远不会超过几百个元素,我认为这并没有什么大不了的,因为我绝对可以防止它对性能产生显着影响,但是如果有一个更干净的解决方案,那就很好了有一种通过数据结构实现此目标的标准/更好的方法。更少的循环,更简洁的代码,更少的代码等。

感谢您的任何建议,反馈等!

0 个答案:

没有答案