编写文本编辑器时,需要一个只能将行号转换为文档偏移量的数据结构。一个简单的实现将是文档偏移的(数组)列表,但是这样做的缺点是,当在开头插入文本时,所有(!)更高的行偏移必须递增和/或移位(对于输入的新行)。建议使用什么类似树状的数据结构,只需要理想地更新1或仅仅是几个元素 - 通过允许文档偏移的访问变得有点慢?
答案 0 :(得分:1)
有多种方法可以做到这一点。一种方法是摊销维持这些补偿的成本。如果您要插入文本,则在您需要访问它们之前,后者行的偏移量无关紧要。您可以保留一个“脏标志”,表示X行后的偏移无效且必须更新。然后,如果用户向下滚动几页,则只需重新计算用户需要访问的行的偏移量。如果需要,您可以使用后台任务异步重新计算偏移量。
有几种优化,包括创建多行的“块”。例如,假设你分配了16兆字节的块。保留每个块的偏移量,然后在需要时解析块以找到线偏移量。这些天的计算机速度非常快。解析16兆字节的文本缓冲区以找到每行的开头需要几微秒:不是用户会注意到的。
我在博文http://blog.mischel.com/2011/12/02/designing-a-better-text-file-viewer/
中详细讨论了这个问题