一个灵活且易于使用的嵌套数据结构。
作为一个开源 Swift 库提供,可以被集成到其他应用中。
SwiftSimpleTree 是 OpenAlloc 开源 Swift 软件工具家族的一部分。
let foo = SimpleTree(value: "foo")
let bar = foo.addChild(value: "bar")
let baz = bar.addChild(value: "baz")
print(foo.getFirst(for: "baz")?.value)
=> "baz"
print(baz.getParentValues())
=> ["bar", "foo"]
print(foo.getChildValues())
=> ["bar", "baz"]
print(foo.getSelfAndChildValues())
=> ["foo", "bar", "baz"]
在 SimpleTree
作用域内的类型
typealias Node = SimpleTree<T>
- 一个树节点,其中 T
是你的可哈希类型。
typealias ValueSet = Set<T>
- 一个值集合,其中 T
是你的可哈希类型。
枚举用于 getChildren()
方法中的 traversal
参数
public enum Traversal {
case depthFirst
case breadthFirst
}
init(value: T)
: 初始化一个新的树(在根节点包含指定的值)
func addChild(value: T) -> Node
: 将一个新节点(包含指定的值)追加到我们的子节点列表
func getChildren(traversal: Traversal, maxDepth: UInt, excludeValues: ValueSet) -> [Node]
: 获取节点的子节点。 可选的子节点排除值列表,以及它们的后代。 traversal
默认为 .breadthFirst
。 注意:尚不支持带有 maxDepth
的广度优先遍历。
func getSelfAndChildren(traversal: Traversal, maxDepth: UInt, excludeValues: ValueSet) -> [Node]
: 获取节点及其子节点。 可选的节点排除值列表,以及它们的后代。 traversal
默认为 .breadthFirst
。 自身节点在第一层深度,因此 maxDepth: 0
返回 []
。 注意:尚不支持带有 maxDepth
的广度优先遍历。
func getParent(excludeValues: ValueSet) -> Node?
: 返回直接父节点(如果有)。 可选的父节点排除值列表。 如果匹配,此函数将返回 nil。
func getParents(maxDepth: UInt, excludeValues: ValueSet) -> [Node]
: 返回父节点,从直接父节点开始。 可选的父节点排除值列表。 如果匹配,将排除更远的祖先节点。 可选的深度限制。
func getFirst(for: T) -> Node?
: 从当前节点开始遍历,以查找第一个具有指定值的节点。 遍历方式为广度优先。
func getFirstChild(for: T) -> Node?
: 从当前节点开始遍历子节点,以查找第一个具有指定值的子节点(或孙子节点等)。 遍历方式为广度优先。
func makeChildIterator(excludeValues: ValueSet) -> AnyIterator<Node>
: 创建一个迭代器,用于遍历当前节点的子节点(孙子节点等)。 遍历方式为广度优先。 在排除过滤器上对子分支进行短路。
func makeParentIterator() -> AnyIterator<Node>
: 创建一个迭代器,用于向上遍历树,经过当前节点的父节点,从最近的父节点开始(如果有)。
func getChildValues(traversal: Traversal, maxDepth: UInt, excludeValues: ValueSet) -> [T]
: 获取子节点的值。 可选的子节点排除值列表,以及它们的后代。 traversal
默认为 .breadthFirst
。 注意:尚不支持带有 maxDepth
的广度优先遍历。
func getSelfAndChildValues(excludeValues: ValueSet) -> [T]
: 获取节点及其子节点的值。 包括当前节点的值。 可选的节点排除值列表,以及它们的后代。 自身节点在第一层深度,因此 maxDepth: 0
返回 []
。 traversal
默认为广度优先。 注意:尚不支持带有 maxDepth
的广度优先遍历。
func getParentValue(excludeValues: ValueSet) -> T?
: 返回直接父节点的值(如果有)。 可选的父节点排除值列表。 如果匹配,此函数将返回 nil。
func getParentValues(maxDepth: UInt, excludeValues: ValueSet) -> [T]
: 返回父节点的值,从直接父节点开始。 可选的父节点排除值列表。 如果匹配,将排除更远的祖先节点。 可选的深度限制。
此库是 OpenAlloc Project 的一个成员。
版权所有 2021, 2022 OpenAlloc LLC
根据 Apache License, Version 2.0 获得许可(“许可证”); 除非遵守许可证,否则您不得使用此文件。 您可以在以下网址获取许可证副本:
https://apache.ac.cn/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据“按原样” basis 分发的软件分发,不附带任何种类的明示或暗示的保证或条件。 请参阅许可证以了解有关特定语言的权限和限制。
欢迎贡献。 鼓励您提交 pull request 来修复错误、改进文档或提供新功能。
Pull request 不需要是生产就绪的功能或修复。 它可以是拟议更改的草案,或者只是一个测试,以表明预期的行为存在错误。 关于 pull request 的讨论可以从那里开始。
贡献最终应具有足够的测试覆盖率。 请参阅当前实体的测试,以了解预期的覆盖率。