【问题标题】:Text editor - line to offset data structure文本编辑器 - 行偏移数据结构
【发布时间】:2018-03-05 07:26:08
【问题描述】:

在编写文本编辑器时,需要有一种数据结构,可以简单地将行号转换为文档偏移量。一个简单的实现将是文档偏移量的(数组)列表,但这有一个缺点,即在开头插入文本时,所有(!)较高的行偏移量都必须增加和/或移动(对于输入的新行)。建议什么样的树状数据结构在理想情况下只需要更新 1 个或几个元素 - 通过允许文档偏移量的访问变慢一点?

【问题讨论】:

    标签: data-structures


    【解决方案1】:

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

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

    我在我的博文 http://blog.mischel.com/2011/12/02/designing-a-better-text-file-viewer/

    中详细讨论了这个问题

    【讨论】:

      猜你喜欢
      • 2011-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多