使用Swift在iOS中持久化包含27000个节点的trie数据树的方法是什么?
我正在构建一个Trie树,它将包含下面大约27000个节点。我想坚持下去,而不是每次在应用程序启动时都重新创建它。因为child属性是另一个节点的字典,所以我在使用使用Swift在iOS中持久化包含27000个节点的trie数据树的方法是什么?,ios,swift,core-data,persistence,trie,Ios,Swift,Core Data,Persistence,Trie,我正在构建一个Trie树,它将包含下面大约27000个节点。我想坚持下去,而不是每次在应用程序启动时都重新创建它。因为child属性是另一个节点的字典,所以我在使用NSCoding将其归档并存储在核心数据实体中时遇到了问题。是否有办法将此节点存储在核心数据中?或者我应该使用不同类型的持久性 class TrieNode { var letter:Character var fullWord:Bool var leadingLetters:String var c
NSCoding
将其归档并存储在核心数据实体中时遇到了问题。是否有办法将此节点存储在核心数据中?或者我应该使用不同类型的持久性
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
}
}
我在尝试使用核心数据时遇到的主要问题是如何将
var child=[Character:trinode]()
转换为NSData或CD可以存储在实体中的其他可用类型。关于如何做到这一点的示例将不胜感激。核心数据有点笨拙。我想我应该做的是:
trieodelink
的新实体。它有一个属性,一个名为childString
的字符串和一个名为node
的关系,类型为triode
。此实体的每个实例表示trie节点的一个子节点trieode
向新的trieodelink
实体添加新的多对多关系子词典。在方便的时候,通过扫描步骤2中的新到多关系来初始化此词典。方便的时间可能是在awakeFromFetch
中,或者您可以将其设置为Swiftlazy
属性。或者,如果您想以更高的内存使用率为代价预加载数据以获得更快的性能,那么您可以编写一些代码,在需要子节点之前将其递归加载到几个级别
这样做的效果是,您可以在需要时根据需要加载部分trie。一旦加载,您就可以使用
子字典快速查找子节点。谢谢,汤姆。我的主要问题是试图把儿童词典变成核心数据喜欢的东西——你对如何做到这一点有什么建议吗?我想我只是描述了一种方法。您无法保存字典,因此需要转换为可以保存在核心数据中的内容。这是一个计划;可能还有其他。您不想将其存储为NSData
。只需为trinode
创建数据模型,并为其创建一个NSManagedObject
,然后如何存储子属性?它不允许我将[Character:trinode]()
编译为NSManagedObject
。请查看核心数据。如果你自己能为此付出一些努力,我们将不胜感激。本网站不是教你如何使用它,而是帮助你解决具体问题。本网站是为@GuidoHendriks提供帮助和指导-如果你不知道答案,欢迎你尝试帮助。我向您提出了一个具体问题—我无法找到将[Character:trinode]()
存储为NSManagedObject
的方法,这导致了第一个问题。你愿意进一步澄清你的建议吗?谢谢,这只是一对多的基本关系?