假设我需要比较Scala中的树状数据结构(例如文件系统目录或XML文档)。如果我压扁树来创建序列很容易,但它看起来浪费了内存。所以,我想展平树来创建迭代器/流。是否有意义 ?你会建议什么:迭代器或流?
答案 0 :(得分:2)
如果您担心内存消耗,则应避免使用流。它们将最终分配与您正在遍历的节点一样多的内存。使用流类似于扁平化到序列,只是懒得完成。
使用迭代器可能更好。但是,树迭代器实现起来可能很棘手。一种更简单,也可能更有效的解决方案是简单地在要比较的两棵树上使用递归。 E.g:
def compare(a: Tree, b: Tree): Boolean = {
if (/* trees a and be are not equal */) false
else if (a.children.length != b.children.length) false
else {
for ((c1, c2) <- a.children zip b.children) {
if (!compare(c1, c2)) return false
}
true
}
}
如果你担心性能,你可能想要摆脱上面的for-comprehension,并使用while循环遍历子节点。