首页 > 解决方案 > 是否可以遍历树并使用“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()或类似的方法将其编码在一行中。

标签: swift

解决方案


您可以使用辅助方法来实现这一点,该方法采用“级别”参数并在每个具有增加级别的子节点上递归调用自身:

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)
}

推荐阅读