数据结构来实现文本编辑器?
最近我在一次采访中被问到了这个问题。 确切的问题是
您将使用什么数据结构来实现文本编辑器。 编辑器的大小可以改变,你还需要保存斜体,粗体等所有文本的样式信息?
在那个时候,我试图说服他使用许多不同的方法,如堆栈,双链表和所有。
从那个时候开始,这个问题让我兴奋不已。
看起来他们想知道你是否了解flyweight pattern
以及如何正确使用它。
文本编辑器是描述该模式的常见示例。
也许你的面试官是GOF书的爱好者。 :-)
除了以前的答案之外,我想补充一点,为了获得数据结构,您首先需要了解您的设计 - 否则选项将会选择过宽。
举例来说,让我们假设你需要一个编辑功能。 在这里,国家和纪念品设计模式将非常适合。 因为它是非常合适的结构
由较小的字符串组成,用于有效地存储和操作很长的字符串。
在我们的例子中是文本编辑程序
可以使用绳子来表示正在编辑的文本,从而可以高效地完成插入,删除和随机访问等操作。
像这样一个开放式问题的设计更多的是为了看看你是否能够有意识地设计一个能够很好地结合在一起的设计,而不是有一个具体的答案。
这个问题的一个专门的答案是使用DOM / XML(“文档对象模型”)。 标记“语言”旨在解决这个确切的问题。 您可以将编辑器的数据存储在DOM中。 使用DOM的优点之一是像Xerces这样的库对构建和管理DOM有广泛的支持,所以很多工作都是为你完成的。 面试官可能希望这是理想的答案。
更一般的答案是可以使用任何嵌套的序列结构。 文本可以看作是一串字符串。 序列的每一个元素,如数据库中的行,都可以有多个属性(字体类型,字体大小,斜体,粗体,删除线等)。 嵌套(层次结构)很有用,因为文档可能具有章节,节,段落等结构。 例如,如果一个段落有自己的样式(缩进),那么它可能需要有自己的级别。 所以你有这样的东西:
Document
Chapter
Paragraph
Text
为了实现这个,你可以使用一棵树,树的每个节点都有多个属性。 你会需要不同种类的节点(章节点,段落节点等)。 因此,例如,像纸这样的文档将在文档节点内具有多节节点和一个Notes节点,但书类文档可能在文档节点内具有章节点。 这种方法的优点在于,它比使用DOM更具体和手工定制,这是一种更灵活的方法。
您还可以将这两种方法结合使用,将DOM用作您的基本结构,并将上述层次结构用作DOM实现。
(注意:将来您应该将这样的问题发布到https://softwareengineering.stackexchange.com/)
链接地址: http://www.djcxy.com/p/87573.html上一篇: Data Structure to Implement Text Editor?
下一篇: Extend the final state of the first animation for translated element