文本编辑器 - 偏移数据结构的行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文本编辑器 - 偏移数据结构的行相关的知识,希望对你有一定的参考价值。

在编写文本编辑器时,需要一个只能将行号转换为文档偏移量的数据结构。一个简单的实现将是文档偏移的(数组)列表,但是这样做的缺点是,当在开头插入文本时,所有(!)更高的行偏移必须递增和/或移位(对于输入的新行)。建议使用什么类似树状的数据结构,只需要理想地更新1或仅仅是几个元素 - 通过允许文档偏移的访问变得有点慢?

答案

有多种方法可以做到这一点。一种方法是摊销维持这些补偿的成本。如果您要插入文本,则在您需要访问它们之前,后者行的偏移量无关紧要。您可以保留一个“脏标志”,表示X行后的偏移无效且必须更新。然后,如果用户向下滚动几页,则只需重新计算用户需要访问的行的偏移​​量。如果需要,您可以使用后台任务异步重新计算偏移量。

有几种优化,包括创建多行的“块”。例如,假设你分配了16兆字节的块。保留每个块的偏移量,然后在需要时解析块以找到线偏移量。这些天的计算机速度非常快。解析16兆字节的文本缓冲区以找到每行的开头需要几微秒:这不是用户会注意到的。

我在博客文章http://blog.mischel.com/2011/12/02/designing-a-better-text-file-viewer/中对此进行了详细讨论

以上是关于文本编辑器 - 偏移数据结构的行的主要内容,如果未能解决你的问题,请参考以下文章

sed行文本处理工具

比 Vim 更现代直观的 Linux 文本编辑器

比 Vim 更现代直观的 Linux 文本编辑器

易语言读取文件

VI命令行文本编辑器

文本编辑器 - 偏移数据结构的行