ios - 如何在 Core Data 中建模二叉树?
问题描述
我目前有一个具有两种关系的实体:leftChild
和rightChild
:
Node:
leftChild: Node (no inverse)
rightChild: Node (no inverse)
现在我希望每个节点都有一个parent
, 并将其设置为两个孩子的倒数:
Node:
leftChild: Node (`parent` is inverse)
rightChild: Node (`parent` is inverse)
parent: Node
问题是,Core Data 似乎不喜欢有parent
两个关系的逆。但是当然 leftChild 和 rightChild 都将具有相同的父级。所以我最终得到了这个不满意的结果:
Node:
leftChild: Node (`leftParent` is inverse)
rightChild: Node (`rightParent` is inverse)
leftParent: Node
rightParent: Node
但是“leftParent”和“rightParent”没有意义,因为只有一个父母。有没有更好的方法来建模这个?
解决方案
将父母与孩子的关系建模为模型,将孩子与父母的关系建模to-many
为to-one
如果您的节点带有偏向感,例如,isLeft: Bool
那么左右节点可以由过滤器或谓词产生。
extension Node {
var leftNode: Node? {
return (children as? Set<Node>)?
.filter({ $0.isLeft })
.first
}
var rightNode: Node? {
return (children as? Set<Node>)?
.filter({ !$0.isLeft })
.first
}
}
其他建议(例如为关系使用有序集)to-many
也可能更适合您的用例。
推荐阅读
- python - 将 Tensorflow 中除最大值之外的所有值归零
- can-bus - 接收 Can BUS 帧 Qt 和 PeakCan USB 适配器
- javascript - 提交后弹出消息
- random-forest - 如何确保随机森林中的所有树都包含一个特征
- ruby - 传出帖子时出现 TCP 连接错误
- php - 在 Wordpress 中集成 Twilio PHP
- javascript - django 和 javascript API
- php - foreach PHP 中的 echo JSON 对象出错
- machine-learning - 拆分数据集
- python - 将列更改为列标题熊猫