swift - 是否可以遍历树并使用“reduce()”逐级缩进结果?
问题描述
我有一个Class
用于存储一棵树并希望使其可打印的工具。
final class Node<Value> : CustomStringConvertible {
var value : Value
private(set) var children : [Node]
var description: String {
value as! String + children.reduce("") { $0 + "\n" + $1.description }
}
//...
}
使用我的代码,所有级别都从每行的第一列开始。是否可以以这种方式按级别缩进结果(例如每级2个空格)?
1
1.1
1.1.1
1.2
1.2.1
1.2.1.1
1.2.1.2
我知道如何用几行代码来解决这个问题。我只想知道是否可以通过使用reduce()
或类似的方法将其编码在一行中。
解决方案
您可以使用辅助方法来实现这一点,该方法采用“级别”参数并在每个具有增加级别的子节点上递归调用自身:
private func toString(level: Int) -> String {
String(repeating: " ", count: level) + "\(value)"
+ children.reduce("") { $0 + "\n" + $1.toString(level: level + 2) }
}
var description: String {
self.toString(level: 0)
}
推荐阅读
- json - 使用 Google Apps 脚本访问 JSON 中未定义的对象
- android - APK 安装失败。错误:无法解析错误字符串
- javascript - 使用 AngularJS 发送 FormData
- python - Gensim`most_similar`中的弃用警告?
- c# - 如何在 C# 中捕获表达式树
- android - 工具栏文本颜色不会改变
- javascript - 如何在不影响样式的情况下单击动画后将 div 堆栈放在页面底部
- python - 从 Python 中的静态属性访问静态方法或属性?
- amp-html - 页面在重新打开 amp-lightbox 时锁定
- shiny - 如何格式化 R Shiny numericInput?