swift - 在树中迭代
问题描述
我有一个节点树,而不是二叉树。节点有节点子节点;
class Node {
id : String
testable: Bool
children: [Node]
}
在这种情况下,孩子可以生孩子,依此类推。我需要遍历树,如果一个节点的可测试为真,我需要返回节点的 id。
如果孩子的可测试为真,我还需要返回孩子的 id。如果我使用儿童/儿童/儿童的循环,我可以获得结果,但它会变得非常难看。有没有一种干净的方法?
解决方案
你需要一个递归函数,像这样
var ids = [String]()
func testableIDs(node : Node, ids : inout [String]) {
if node.testable { ids.append( node.id) }
for child in node.children {
testableIDs(node: child, ids: &ids)
}
}
inout
它调用自己分别迭代孩子,用参数收集id 。
推荐阅读
- sql - 将 varchar 转换为浮点数
- wordpress - 如何在自定义帖子类型的范围内计算自定义分类术语的实例?
- javascript - 点击事件在 iOS 和 Safari 上不起作用
- javascript - 上传到 S3 和应用托管在 S3 中时的 Axios 无进度事件
- javascript - drive.properties for 循环与谷歌表
- javascript - css 选择器只选择第一个子文本而不是 div
- sql - 如何将一列中的多个值(整数)与另一列中的描述(字符)值相加?
- python - 我正在尝试使用 graphics.py 库创建一个宽度 = 100 和长度 = 50 的矩形。我对如何指定长度有点困惑
- atom-editor - 为什么 Atom 编辑器停止为长行代码着色?
- javascript - Firestore:更新不同的嵌套对象