使用Swift在iOS中使用27000个节点保留trie数据树的方法是什么?

我正在构建一个Trie树,下面有大约27000个节点。 我希望坚持下去,而不是每次在应用程序启动时重新创建它。 因为子属性是另一个节点的字典,所以我无法使用NSCoding将其存档并存储在核心数据实体中。 有没有办法将此节点存储在Core Data中? 或者我应该使用不同类型的持久性?

 class TrieNode { var letter:Character var fullWord:Bool var leadingLetters:String var child = [Character:TrieNode]() init (letter:Character, leadingLetters:String, fullWord:Bool) { self.letter = letter self.fullWord = fullWord self.leadingLetters = leadingLetters } } 

我尝试使用Core Data时遇到的主要问题是如何将var child = [Character:TrieNode]()转换为NSData或CD可以存储在实体中的另一种可用类型。 关于如何做到这一点的例子将不胜感激。

核心数据有点尴尬。 我想我要做的是:

  1. 创建一个名为TrieNodeLink的新实体。 它有一个属性,一个名为childString的字符串和一个名为TrieNode类型的node的关系。 该实体的每个实例代表特里节点的一个单个子节点。
  2. 从现有TrieNode添加新的to-many关系到新的TrieNodeLink实体。
  3. 保留现有的child字典。 在方便的时候,通过扫描步骤2中的新的to-many关系来初始化这个字典。一个方便的时间可能在awakeFromFetch ,否则你可以使它成为一个Swift lazy属性。 或者,如果您希望以更高的内存使用成本预加载数据以获得更快的性能,您可以编写一些代码,以便在需要之前递归加载几个级别的子节点。

这样做的结果是,您需要时根据需要加载部分trie。 加载后,您就可以使用child字典快速查找子节点。